我有一个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
我做错了什么?
答案 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"