2013-11-09 91 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"