2

我有一个 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

我究竟做错了什么?

4

2 回答 2

2

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

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

于 2013-11-09T14:57:47.560 回答
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"
于 2013-11-09T14:32:32.073 回答