當我運行從蟒蛇此子命令,它似乎像蟒蛇攤從不輸出任何東西:子過程的Python錯誤
msg = subprocess.call(['/Users/admirmonteiro/bin/Praat', '/Users/admirmonteiro/tmp/tmp.praat'])
但是當我運行命令本身從終端,運行和關閉,因爲它應該:
Praat /tmp/tmp.praat
是否有人能夠告訴我爲什麼python沒有完成代碼,並且正在拖延和不輸出任何東西?
謝謝!
當我運行從蟒蛇此子命令,它似乎像蟒蛇攤從不輸出任何東西:子過程的Python錯誤
msg = subprocess.call(['/Users/admirmonteiro/bin/Praat', '/Users/admirmonteiro/tmp/tmp.praat'])
但是當我運行命令本身從終端,運行和關閉,因爲它應該:
Praat /tmp/tmp.praat
是否有人能夠告訴我爲什麼python沒有完成代碼,並且正在拖延和不輸出任何東西?
謝謝!
你可以嘗試確保標準輸入和stdout(或其他文件描述符)不會造成問題的原因:
p = subprocess.POpen(
['/Users/admirmonteiro/bin/Praat', '/Users/admirmonteiro/tmp/tmp.praat'],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.STDOUT,
close_fds=True,
)
print p.communicate()
print p.wait()
我試過這個,但它再次打開Praat,期望我按下運行按鈕,然後在python返回任何內容之前退出它。 – Aboogie
看來你已經交換的參數。
msg = subprocess.call(['/Users/admirmonteiro/bin/Praat', '/Users/admirmonteiro/tmp/tmp.praat'])
應該
msg = subprocess.call([ '/Users/admirmonteiro/tmp/tmp.praat','/Users/admirmonteiro/bin/Praat'])
好吧,奇怪,但當我運行這個:msg = subprocess.call(['/Users/admirmonteiro/tmp/tmp.praat','/Users/admirmonteiro/bin/Praat'],shell=True)我得到這個錯誤:/ Users/admirmonteiro/bin/Praat:/Users/admirmonteiro/tmp/tmp.praat:權限被拒絕。 – Aboogie
完美。改變現在的權限 '/Users/admirmonteiro/tmp/tmp.praat是可執行 '使用chmod + X'/用戶/ admirmonteiro的/ tmp/tmp.praat' ,如果你是在* nix平臺 –
有一個新的錯誤:回溯(最近通話最後一個): 文件 「」,1號線,在
你需要做的事情與子的標準輸入輸出和錯誤?子進程是否產生大量輸出,或者期望輸入?也許通過從父進程繼承他們導致子進程認爲有數據要讀取,所以它正在等待能夠讀取stdin? –
不,我不相信(對Praat的輸入是tmp.praat),根本沒有輸出,它實際上打開了praat工具本身,並期望我運行該文件,並且當我這樣做時,有來自子進程的輸出命令。我不想要這個過程。我希望它像是從終端運行它,當我打電話時,它運行Praat /tmp/tmp.praat並關閉它自己。 – Aboogie
如果你運行諸如「cat/dev/null | Praat /tmp/tmp.praat | cat」之類的東西,它在命令行上工作嗎?想知道Praat進程是否檢測到一個tty標準輸入/標準輸出,並因此而表現不同。 –