gpt4 book ai didi

windows - 如何在启动时重定向 stderr *而不*重定向 stdin 和 stdout?

转载 作者:可可西里 更新时间:2023-11-01 10:48:55 26 4
gpt4 key购买 nike

在 Windows 中,我想使用 CreatePipe 和 CreateProcess 来启动一个进程,并捕获写入到 stderr 的文本。

MSDN 上有示例代码: http://msdn.microsoft.com/en-us/library/windows/desktop/ms682499(v=vs.85).aspx

我的问题是我想重定向和捕获 STDERR,但不理会 STDIN 和 STDOUT。让它们仍然绑定(bind)到子进程的控制台窗口。 (如果子进程是控制台进程而不是窗口进程。)

如果我按照示例代码,将 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"

请注意 SHGetFileInfo with SHGFI_EXETYPE 会告诉您可执行文件是否是控制台应用程序(如果您还不知道的话)。

关于windows - 如何在启动时重定向 stderr *而不*重定向 stdin 和 stdout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12732445/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com