我成功設法管到沒有進一步的管道,這樣一個命令的變量:如何在python中通過兩個管道連接管道變量的內容?
from subprocess import Popen, PIPE
def exec_command(command, some_input):
proc = Popen(command, stdout=PIPE, stderr=PIPE, stdin=PIPE)
(stdout, stderr) = proc.communicate(input=some_input)
...但試圖管它時,進一步的管道命令(例如管道,以焦油,然後進一步管道分裂),它似乎並沒有工作:
from subprocess import Popen, PIPE
def exec_piped_command(command1, command2, some_input):
proc1 = Popen(command1, stdout=PIPE, stdin=PIPE)
proc2 = Popen(command1, stdin=proc1.stdout, stdout=PIPE)
(stdout, stderr) = proc2.communicate(input=some_input)[0]
那麼,如何做正確的方法來做第二個變種?看起來上面代碼的問題是,「proc2.communicate()」命令中的輸入沒有到達proc1的stdin管道? (不知道雖然......不幸的是我對子進程語法有點困惑......)。
proc2.communicate試圖一些輸入饋入管道,但對於PROC2輸入PIPE已經設置有從PROC1輸出PIPE --- UNIX管道不適合於多個寫入器/讀取過程(它們不是這樣隊列對象;也不像套接字)。這可能會導致您的代碼出現死鎖。 – 2011-05-25 08:41:59
是的,真的,所以我的問題是,如何將變量提供給proc1的輸入,並仍然執行整個鏈接的命令? ...做proc1.communicate(輸入= some_input)也不工作... – 2011-05-25 08:43:27
文體問題; '從x導入*'是非常糟糕的,並且讓所有**時間都氣餒。 – 2011-05-25 08:53:01