簡體   English   中英

如何將進程的stdout和stderr傳遞到同一Handle?

[英]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。

我最終實現了一個跨平台的createPipehttps : //github.com/haskell/cabal/blob/master/Cabal/tests/Distribution/Compat/CreatePipe.hsc

我們可能應該在某個時候將其放在更易於訪問的地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM