在Windows中,我想使用CreatePipe和CreateProcess来启动进程,并捕获写入stderr的文本。
MSDN上有示例代码: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682499(v=vs.85).aspx
我的问题是我想重定向并捕获STDERR,但只留下STDIN和STDOUT。让他们仍然绑定到子进程的控制台窗口。 (如果子进程是控制台进程而不是窗口进程。)
如果我按照示例代码,并将STARTUPINFO.hStdError设置为我的管道句柄,并将STARTUPINFO.hStdOutput和STARTUPINFO.hStdInput设置为INVALID_HANDLE_VALUE,则子进程对stdin和stdout具有INVALID_HANDLE_VALUE;所有读取失败;所有的printf都无处可去;并且控制台窗口完全空白。
这甚至可能吗?
答案 0 :(得分:0)
这应该有效:
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
的{{3}}会告诉您可执行文件是否为控制台应用程序(如果您还不知道)。