2011-09-30 15 views
6

stdoutに何かを書き込んで、状態コード( "exit status"とも呼ばれる)を返すバイナリプログラムを実行するには、Luaを使用する必要があります。戻り値の取得とプログラム出力

私はウェブを検索して、必要なものを見つけることができませんでした。

を読み取るために使用できるファイルハンドラを返すステータスコードを返します。しかし、私はLuaの中にいることが分かりました。シーンの背後にある両方の関数を実行するラッパー関数を書くことは、プロセスオーバーヘッドと、おそらくは連続した実行での結果の変更のためにオプションではありません。私はこのような関数を書く必要があります:

function run(binpath) 
    ... 
    return output,exitcode 
end 

誰もがこの問題を解決する方法を知っていますか?

PS。ターゲットシステムはLinuxを実行します。それをあなたは小さなシェルスクリプトを書くことができ、またhttp://code.google.com/p/lua-ex-api/

(bashのを想定しまたは類似が利用可能です):

答えて

8

。2私は、次の操作を行うことができますし、それはこのことができます

-- This will open the file 
local file = io.popen('dmesg') 
-- This will read all of the output, as always 
local output = file:read('*all') 
-- This will get a table with some return stuff 
-- rc[1] will be true, false or nil 
-- rc[3] will be the signal 
local rc = {file:close()} 

希望に動作します...

1

あなたは、Win32上またはPOSIX環境でこのコードを実行している場合、あなたはこのLuaの拡張を試みることができます:

  • シェル変数VALUをプリントアウト標準
  • に改行と端末キャラクタ/文字列を出力
  • 、シェル変数に終了コードを捕捉、正しい実行ファイルを実行しますe(終了コード)を標準出力に出力する

次に、io.popenの出力をすべてキャプチャして後方に解析します。

詳細情報:私はLuaデベロッパーではありません。

+0

ありがとうございます。はい、私たちは小さなLinuxシステム上にシェルを持っています。これは問題に対する最速の解決方法です。 – AlexStack

+0

@AlexStackあなたは大歓迎です。 –

2

この機能はCでpcloseで提供されています。

戻り値が成功すると、pclose()はコマンド言語インタープリタの終了ステータス を返します。

インタープリタは、その子の終了ステータスを返します。

しかし、Luaはこの権利を行いません(io.closeは常にtrueを返します)。私はこれらの糸を掘っていないが、一部の人々はこの脳の損傷について不平を言っている。 LUA 5で

+0

説明とスレッドへのリンクありがとう。 – AlexStack

+0

@AlexStackあなたは道を見つけることを望みます。ルアは素晴らしいですが、開発が遅いようです(最初のスレッドは2004年です!)。 – cnicutar

1

私はLuaの5.2を使用することはできません、私はこのヘルパー関数を使用します。

function execute_command(command) 
    local tmpfile = '/tmp/lua_execute_tmp_file' 
    local exit = os.execute(command .. ' > ' .. tmpfile .. ' 2> ' .. tmpfile .. '.err') 

    local stdout_file = io.open(tmpfile) 
    local stdout = stdout_file:read("*all") 

    local stderr_file = io.open(tmpfile .. '.err') 
    local stderr = stderr_file:read("*all") 

    stdout_file:close() 
    stderr_file:close() 

    return exit, stdout, stderr 
end 
0

はい、あなたはos.execute()はリターンを持っている権利であり、あなたはまた、それが返されますどのように多くの変数を知りたいことがあり、それがかかる場合があります アウトLUAでとして、あなたのコマンドを実行する方法を理解していれば、それは非常に簡単ですしばらく、私はあなたが私の例aが最初に返さ引数で、bは二返さ引数で、などのため

local a, b, c, d, e=os.execute(-what ever your command is-) 

を試すことができると思う..私は、私は何のオフに基づいて、右のあなたの質問に答えたと思います尋ねている。

関連する問題