2011-09-05 7 views
0

私はコマンドを実行した結果を返す小さな関数を書いています。popen()は結果の最後に改行( n)を追加しますか?

function axsh(cmd) 
    local fullCmd=cmd:lower() 
    local f,err=io.popen(fullCmd,"r") 
    if not f then 
     return nil,"Could not create the process '"..fullCmd.."' \nError:"..err 
    end 
    return f:read("*all") 
end 

s=axsh("echo hi") 
--print all bytes 
print(s:byte(1,s:len())) 

出力は常に\ nを有する終わりにどんなコマンドではありません。

104 105 10 

編集:それは私自身のバイナリコマンドラインアプリケーションのためだけでなく、ほとんどすべてのためだけではなく、たまたまOSコマンド:Windows: "dir"、 "ipconfig"、 "echo" ... Linux: "ls"、 "pwd"、 "ls" ...

しかし、コマンドを別々に実行するとコマンドプロンプト)、改行フィードはありません。私はそれを必要としないので、結果を返す前に最後の文字を削除する必要があります。

質問:この改行は常にpopen()の結果に存在しますか?私はドキュメントでこの動作への参照を見つけることができません。

答えて

2

番号io.popenは、コマンドが生成する文字列を返します。 echoをコマンドとして使用します。これは、文字列の後に改行を置くことになります(コマンドプロンプトが出力の直後ではなく次の行に表示されるようになります)。

あなたはしようとし、これを使って、それをテストすることができます

s=axsh([[lua -e "io.write([=[hi]=])"]]) 
return string.byte(s,1,-1) 

改行で出力を終了しません。

関連する問題