0

複数のC++パッケージをインストールしてビルドできるようにするRubyスクリプトを開発しました。Rubyスクリプトを実行して、エラーなしでパッケージをインストールできます。

ただし、cerrを含むすべての出力を、選択した「ログ」ファイルにキャプチャできるようにしたいと思います。Rubyのcerrと標準出力をリダイレクトすることはできますが、bashコマンド(、、、またはcerr)をキャプチャできqmakeませmakemake install。出力は引き続き端末に流れます。

qmakeRubyスクリプトを実行して、、、、makeまたはbashコマンドからのデバッグメッセージを表示しないようにしたいのですが、make install後でログファイルでビルド結果を確認できるようにします。

4

4 に答える 4

2

できるよ

require 'open3'

log = File.new("#{your_log_dir}/script.log", "w+")
command = "make"

Open3.popen3(command) do |stdin, stdout, stderr|
     log.puts "[OUTPUT]:\n#{stdout.read}\n"
     unless (err = stderr.read).empty? then 
          log.puts "[ERROR]:\n#{err}\n"
     end
end
于 2012-08-20T16:05:31.453 に答える
0

%x[#insert bash command here]応答をキャプチャします。STDERRを処理する必要がある場合は、それをSTDOUTにパイプする必要があると思います。

于 2012-08-20T16:13:07.807 に答える
0

子プロセスのstdoutとstderrをファイルに直接ダンプするには:

cmd = ['ls', '-ahl', '/my/directory'] # example directory listing
pid = Process.spawn *cmd, out: '/path/to/stdout/log', err: '/path/to/stderr/log'
Process.wait pid

パス文字列の代わりにファイル記述子を渡すこともできます。

于 2012-08-20T16:22:35.393 に答える
0

Mac OSまたはLinuxを使用している場合、スクリプト内の変数にSTDOUTとSTDERRをキャプチャする場合は、標準のリダイレクトと単純なシェル呼び出しを使用できます。

asdf = `ls foo 2>&1`
asdf # => "ls: foo: No such file or directory\n"

2>&1コマンド出力のSTDERRをSTDOUTにリダイレクトするだけで、プログラムの実行時にキャプチャされます。

後で使用するためにSTDOUTとSTDERRの両方を同じファイルにリダイレクトする場合は、次を使用します。

`ls foo > output.log 2>&1`

STDOUTは、&2>1有効になる前にリダイレクトする必要がありますが、両方をキャプチャします。

詳細については、の「リダイレクト」セクションを参照してくださいman sh

于 2012-08-20T18:13:29.637 に答える