![](/img/trans.png)
[英]How do I correctly launch a process and forward stdin/stdout/stderr?
[英]How to redirect stderr on launch *without* redirecting stdin and stdout?
在Windows中,我想使用CreatePipe和CreateProcess啟動一個進程,並捕獲寫入stderr的文本。
在MSDN上,這里有示例代碼: http : //msdn.microsoft.com/zh-cn/library/windows/desktop/ms682499 (v= vs.85).aspx
我的問題是我想重定向和捕獲STDERR,但不要理會STDIN和STDOUT。 讓它們仍然綁定到子進程的控制台窗口。 (如果子進程是控制台進程而不是窗口進程。)
如果我遵循示例代碼,並將STARTUPINFO.hStdError設置為管道句柄,並將STARTUPINFO.hStdOutput和STARTUPINFO.hStdInput設置為INVALID_HANDLE_VALUE,則子進程將INVALID_HANDLE_VALUE設置為stdin和stdout。 所有讀取失敗; 所有printf都無濟於事; 並且控制台窗口完全空白。
這有可能嗎?
這應該工作:
STARTUPINFO.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
STARTUPINFO.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
另外,如果您不能為父進程提供控制台,則可以將hStdOutput和hStdInput設置為INVALID_HANDLE_VALUE並通過cmd.exe進行調用,如下所示:
cmd /c "subprocess.exe > con < con"
請注意,帶有SHGFI_EXETYPE
SHGetFileInfo
將告訴您可執行文件是否是控制台應用程序(如果您不知道的話)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.