如果可能我不想使用subProcess.popen
。我想捕获子进程启动的stdout的原因是因为我需要将子进程的输出保存到一个变量中以便以后再显示出来。不过,我还没有找到一种方法来做到这一点。我还需要激活多个程序,而不必关闭活动的程序。我还需要控制父流程中的子流程。如何将打印和标准输出重定向到管道并从父进程读取它?
我推出一个子这样
listProgram = ["./perroquet.py"]
listOutput = ["","",""]
tubePerroquet = os.pipe()
pipeMain = os.pipe()
pipeAge = os.pipe()
pipeSavoir = os.pipe()
pid = os.fork()
process = 1
if pid == 0:
os.close(pipePerroquet[1])
os.dup2(pipePerroquet[0],0)
sys.stdout = os.fdopen(tubeMain[1], 'w')
os.execvp("./perroquet.py", listProgram)
现在你可以看到我启动程序与os.execvp
和使用os.dup2()
重定向孩子的标准输出。但是我不确定我在代码中做了什么,并且想知道将os.dup2
重定向stdout然后能够在父进程中读取它的正确方法。
谢谢你的帮助。
那么你有什么不工作什么变化?以什么方式? – martineau 2014-10-31 15:50:48
为什么你不能使用子进程? – Vyktor 2014-10-31 16:11:09
由于程序的性质,我需要执行任何操作(包括命令),除非我误解了'subProcess.popen'的工作方式,执行一个命令和一个程序需要不同的格式化 – IIIlII47IIIlII 2014-10-31 16:14:53