io.popen():lines()忽略第一个非空行

时间:2013-11-09 13:55:27

标签: lua popen

我有一个shell脚本,其输出如下:

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 个答案:

答案 0 :(得分:2)

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

看起来问题出在脚本中......

答案 1 :(得分: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"