Windows环境中子进程如何访问父进程的标准输出?
问题解答
在你当前的启动方式下,子进程无法访问父进程的stdout,原因如下:
- 重定向直接切断了关联:启动命令里的
> {path to output}是通过cmd.exe强制把目标exe的stdout输出重定向到指定文件,子进程的标准输出句柄已经被绑定到这个文件,和父进程的stdout没有任何关系。 - Windows没有跨进程直接获取父进程句柄的便捷方式:Windows的进程资源是隔离的,不像类Unix系统有专门的文件系统可以通过PID直接读取父进程的文件描述符。就算你拿到父进程PID,也没法直接打开它的stdout句柄——句柄是进程私有资源,没有特殊权限和主动传递的话,跨进程访问根本行不通。
- 多了cmd.exe这一层隔离:你是通过cmd.exe来启动目标exe的,所以目标exe的直接父进程是cmd.exe,而非你的Python主进程。就算你能拿到cmd的stdout,那也不是你要的Python进程的输出流。
内容的提问来源于stack exchange,提问作者Marcus 123
相关产品推荐
相关产品推荐

