1
我寫一個程序,兩個程序通信:POPEN掛在溝通
output = Popen(shlex.split(query_cmd), stdout=PIPE,stdin=None)
cmd_out = [output.stdout]
while cmd_out:
readable,writeready,exceptready = select.select(cmd_out,[],[],timeout)
for f in readable:
line = f.readline()
snap_result=Popen(shlex.split("snap %s" % (line)),stdout=PIPE,close_fds=True).communicate()[0]
print snap_result
據稱query_cmd將不斷產生結果的線。 snap應該使用這一行作爲參數,返回結果並終止。這適用於python2.4。但是,在python2.6.6上,看起來snap會在讀取結果時掛起。 如果我將query_cmd更改爲「tail -f file」。它似乎也起作用。
我在一個csh腳本中運行這個腳本,其中stdout/stderr都被重定向到一個日誌文件。
編輯:其實,它是奇怪的,在csh中,我重定向stdout stdout & stderr到日誌文件。如果我只重定向標準輸出,它運行良好。如果我重定向stderr,它會掛起。我認爲stderr會在python的父進程和子進程之間搞砸。
如果您註釋掉'snap_result ='和跟隨行,但是隻是打印出行,會發生什麼? – deets
如果我發表評論,它會工作,它只會打印出行 –
如果你刪除close_fds會發生什麼?如果用例如「snap」代替「snap」,會發生什麼? 「回聲」? – deets