50

Lua で「os.execute」を実行すると、コンソールがすぐにポップアップし、コマンドが実行されてから閉じます。しかし、標準の Lua ライブラリのみを使用してコンソール出力を取り戻す方法はありますか?

4

3 に答える 3

71

io.popen がある場合、これを使用します。

関数 os.capture(cmd, raw)
  ローカル f = アサート (io.popen(cmd, 'r'))
  ローカル s = assert(f:read('*a'))
  f:閉じる()
  raw の場合は end を返します
  s = string.gsub(s, '^%s+', '')
  s = string.gsub(s, '%s+$', '')
  s = string.gsub(s, '[\n\r]+', ' ')
  戻り値
終わり

io.popen がない場合は、システムで popen(3) を使用できない可能性があり、深いヨーグルトを食べていることになります。ただし、すべての unix/mac/windows Lua ポートには io.popen があります。

(gsubビジネスは、先頭と末尾のスペースを取り除き、改行をスペースに変換します。これは、シェルがその$(...)構文で行うこととほぼ同じです。)

于 2008-11-28T21:19:22.327 に答える
28

このhttp://pgl.yoyo.org/luai/i/io.popen io.popenが必要だと思います。しかし、常にコンパイルされるとは限りません。

于 2008-09-27T08:56:01.633 に答える
1

Luaについて具体的にはわかりませんが、通常は次のようにコマンドを実行できます。

comd >comd.txt 2>&1

出力とエラーをファイルcomd.txtにキャプチャし、言語ファイルI/O関数を使用してそれを読み込みます。

言語自体が標準出力とエラーをキャプチャするために提供していなかった場合、それは私がそれを行う方法です。

于 2008-09-25T10:11:05.397 に答える