![](/img/trans.png)
[英]How do I correctly launch a process and forward stdin/stdout/stderr?
[英]How do I pipe the stdout and stderr of a process to the same Handle?
如何將進程的stdout和stderr傳遞到同一Handle? 在UNIX系統上,這非常簡單,只需使用createPipe
並將寫入端作為stdout和stderr傳遞給runProcess
。 在Windows上更難:
unix-compat和Win32軟件包均未導出創建管道的方法。
openTempFile
(可用於模擬管道)在創建的Handle
上設置了錯誤的模式。
編輯:提供更多上下文:我想運行一個進程,並使其以跨平台方式將其stdout和stderr寫入同一Handle
。
您可以使用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
函數以運行proc。
我最終實現了一個跨平台的createPipe
: https : //github.com/haskell/cabal/blob/master/Cabal/tests/Distribution/Compat/CreatePipe.hsc
我們可能應該在某個時候將其放在更易於訪問的地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.