如果可能我不想使用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