2012-10-29 5 views
6

プロセスのstdoutとstderrを同じハンドルにパイプするにはどうすればよいですか? UNIXシステムでは、それはかなり簡単です。createPipeを使い、書き込み終了をrunProcessにstdoutとstderrとして渡してください。 Windowsでは難しいです:プロセスのstdoutとstderrを同じハンドルにパイプするにはどうすればよいですか?

  • unix-compatもWin32パッケージも、パイプを作成する方法をエクスポートしません。

  • openTempFile(パイプのシミュレートに使用できる)は、作成されたHandleに間違ったモードを設定します。

編集:いくつかのより多くのコンテキストを与えるために:私は、プロセスを実行すると、それはクロスプラットフォームな方法で、同じHandleにそのstdoutとstderrを書く持っています。

+0

興味深い。どのように権限が間違っていますか?ドキュメントによると、 'openTempFile'の' Handle'は 'ReadWrite'パーミッションで作られています。これは他のプロセス(同じユーザが走っている)が書き込むのに十分なはずです。 –

答えて

2

System.Processのものを使用できます。 CreateProcess定義で

std_in  :: StdStream,    --^How to determine stdin 
std_out  :: StdStream,    --^How to determine stdout 
std_err  :: StdStream,    --^How to determine stderr 

StdStreamは、このコンストラクタを持っているがあります。

data StdStream = UseHandle Handle 

は、その後、あなたはあなたのPROCを実行するためのcreateProcess関数に形成されたオブジェクトを渡します。

+0

問題は最初に 'Handle'を作成する方法です。 – tibbe

+0

'どのハンドル? stdout/stderrへのハンドル? – arrowd

+0

@arrowdはい、std_outとstd_errの両方を読むことができる共有ハンドルをどのように作成しますか? – mljrg

関連する問題