6

プロセスの stdout と stderr を同じハンドルにパイプするにはどうすればよいですか? createPipeUNIX システムでは、書き込み終了をrunProcessstdout と stderr の両方として使用して渡すだけで、非常に簡単です。Windows では、より困難です。

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

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

編集:さらにコンテキストを提供するには:プロセスを実行し、その stdout と stderr をHandleクロスプラットフォームの方法で同じに書き込みたい。

4

2 に答える 2

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

その後、作成したオブジェクトをcreateProcess関数に渡してプロシージャを実行します。

于 2012-10-29T03:22:30.830 に答える
0

私はクロスプラットフォームを実装することになりましたcreatePipe: https://github.com/haskell/cabal/blob/master/Cabal/tests/Distribution/Compat/CreatePipe.hsc

いつかもっとアクセスしやすい場所に置くべきでしょう。

于 2012-10-30T04:24:26.903 に答える