簡體   English   中英

如何在啟動時重定向stderr,而無需重定向stdin和stdout?

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

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