Python 3.7(Windows 10)subprocess管道捕获进程输出原理问询
subprocess管道捕获进程输出的原理(Windows 10 + Python 3.7环境)
1. subprocess如何通过管道捕获进程输出?
在subprocess.Popen中指定stdout=subprocess.PIPE(如果需要合并标准错误,可加上stderr=subprocess.STDOUT),就能将子进程的输出导向管道,Python父进程随后可从这个管道读取子进程的输出内容。
2. 具体而言,subprocess是如何捕获运行对象的输出的?
针对你提到的几种猜测,逐一说明:
- 不使用操作系统钩子或共享内存空间
- 不会引导进程写入磁盘文件后再读取,全程无磁盘文件操作
- 不采用网络套接字
- 实际依赖Windows系统原生的匿名管道机制:Python调用Windows API
CreatePipe创建一对匿名管道(包含读取端和写入端句柄),启动子进程时,将子进程的标准输出/错误句柄替换为管道的写入端;子进程运行时输出的内容会写入管道,Python父进程则从管道的读取端读取这些数据,完成输出捕获。
代码示例
proc = subprocess.Popen(cmd, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
内容的提问来源于stack exchange,提问作者Davep1553
相关产品推荐
相关产品推荐

