因此,我试图仅使用fork/exec/pipe/dup2捕获子进程的输出,但输出会一直打印到终端。这是我现在的代码:
import os
import sys
pipeIn, pipeOut = os.pipe()
processid = os.fork()
if processid == 0:
try:
os.close(pipeIn)
os.dup2(pipeOut, 0)
os.execv(sys.executable, [sys.executable, 'helloWorld.py'])
sys.exit(0)
except FileNotFoundError:
print("ERROR: File not found.")
sys.exit(1)
elif processid == -1:
print("ERROR: Child was unable to run.")
sys.exit(1)
else:
wait = os.wait()
if wait[1] == 0:
os.close(pipeOut)
output = os.read(pipeIn, 100)
else:
output = "ERROR"
谁能告诉我出了什么问题吗?以及如何捕获exec命令的输出,而不是将其打印到终端。(也不允许临时文件)
标准输出是fd1,但您正在
dup
将管道置于fd0(标准输入)之上。将os.dup2(pipeOut, 0)
更改为os.dup2(pipeOut, 1)
相关问题 更多 >
编程相关推荐