2013-11-09 89 views
2

我有了这样的输出的外壳脚本:io.popen():线()忽略第一个非空线

1 
Space Cruise (Title) 
Ben Prunty Music 
FTL 
46.4 

现在我想线到一个这样的数组映射:

mymplayer = { track="", title="", artist="", album="", time="" } 

所以我使用io.popen()这样的(用于测试目的):

function get_data() 
    local fh = io.popen("bin/mplayerout.sh") 
    for l in fh:lines() do print(l) end 
end 

的问题是,这具有以下的输出:

Space Cruise (Title) 
Ben Prunty Music 
FTL 
46.4 

现在,如果我让我的脚本的输出开始一个新行,输出是这样的:

<empty line> 
Space Cruise (Title) 
Ben Prunty Music 
FTL 
46.4 

我在做什么错?

回答

2

好吧,我发现这个问题。当在Python中做同样的事时,我得到了第一行 - 但是作为3281个空字节('\x00'),然后是'\x02\n'

看起来像问题是在脚本中...

1

这可能是输出的从mplayerout.sh的第一行回车("\r")结束,而其它端在换行("\n""\r\n"。)

然后初始"1"仍然会在输出中,但"\r"将导致终端用以下字符覆盖它。

您可以使用print(string.format("%q", l))来查看此内容。如果嵌入在第一线"\r",输出将是:

"1\rSpace Cruise (Title)" 
"Ben Prunty Music" 
"FTL" 
"46.4"