haskellプログラム内からプロセスを呼び出し、stdoutとstderrをキャプチャしたいと思います。
私がやること:
(_, stdout, stderr) <- readProcessWithExitCode "command" [] ""
問題:このように、stdoutとstderrは別々にキャプチャされますが、メッセージを適切な場所に表示する必要があります(そうでない場合は、stdout ++ stderr
エラーメッセージを対応するstdoutから単純に分離します)。
出力をファイルにパイプする場合、つまり、これを達成できることを私は知っています。
tmp <- openFile "temp.file" ...
createProcess (proc "command" []) { stdout = UseHandle tmp,
stderr = UseHandle tmp }
したがって、現在の回避策は、出力を一時ファイルにパイプして読み戻すことです。ただし、より直接的なアプローチを探しています。
確かにUNIXを使用している場合は、シェルコマンドを呼び出すだけです。
command 2>&1
以上です。ただし、これはできるだけポータブルにしたいと思います。
これが必要な理由:特定のプログラムを呼び出して出力を出力する小さなhaskell cgiスクリプト(それで遊ぶためだけに)を作成しました。出力をhtmlエスケープしたいので、単純にstdoutにパイプすることはできません。
私が考えていたのは、JavaのPipedInputStream / PipedOutputStreamや、メモリ内でIOストリームを処理できるArrayInputStream/ArrayOutputStreamのようなメモリ内ハンドルを作成できる可能性があるということです。hoogleの関数を探しました:: Handle
が、何も見つかりませんでした。
たぶん、2つのストリームをマージできる別のHaskellモジュールがありますか?