2016-03-03 55 views
-1

當我運行從蟒蛇此子命令,它似乎像蟒蛇攤從不輸出任何東西:子過程的Python錯誤

msg = subprocess.call(['/Users/admirmonteiro/bin/Praat', '/Users/admirmonteiro/tmp/tmp.praat']) 

但是當我運行命令本身從終端,運行和關閉,因爲它應該:

Praat /tmp/tmp.praat 

是否有人能夠告訴我爲什麼python沒有完成代碼,並且正在拖延和不輸出任何東西?

謝謝!

+0

你需要做的事情與子的標準輸入輸出和錯誤?子進程是否產生大量輸出,或者期望輸入?也許通過從父進程繼承他們導致子進程認爲有數據要讀取,所以它正在等待能夠讀取stdin? –

+0

不,我不相信(對Praat的輸入是tmp.praat),根本沒有輸出,它實際上打開了praat工具本身,並期望我運行該文件,並且當我這樣做時,有來自子進程的輸出命令。我不想要這個過程。我希望它像是從終端運行它,當我打電話時,它運行Praat /tmp/tmp.praat並關閉它自己。 – Aboogie

+0

如果你運行諸如「cat/dev/null | Praat /tmp/tmp.praat | cat」之類的東西,它在命令行上工作嗎?想知道Praat進程是否檢測到一個tty標準輸入/標準輸出,並因此而表現不同。 –

回答

0

你可以嘗試確保標準輸入和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() 
+0

我試過這個,但它再次打開Praat,期望我按下運行按鈕,然後在python返回任何內容之前退出它。 – Aboogie

-1

看來你已經交換的參數。

msg = subprocess.call(['/Users/admirmonteiro/bin/Praat', '/Users/admirmonteiro/tmp/tmp.praat']) 

應該

msg = subprocess.call([ '/Users/admirmonteiro/tmp/tmp.praat','/Users/admirmonteiro/bin/Praat']) 
+0

好吧,奇怪,但當我運行這個:msg = subprocess.call(['/Users/admirmonteiro/tmp/tmp.praat','/Users/admirmonteiro/bin/Praat'],shell=True)我得到這個錯誤:/ Users/admirmonteiro/bin/Praat:/Users/admirmonteiro/tmp/tmp.praat:權限被拒絕。 – Aboogie

+0

完美。改變現在的權限 '/Users/admirmonteiro/tmp/tmp.praat是可執行 '使用chmod + X'/用戶/ admirmonteiro的/ tmp/tmp.praat' ,如果你是在* nix平臺 –

+0

有一個新的錯誤:回溯(最近通話最後一個): 文件 「」,1號線,在 文件 「/Users/admirmonteiro/anaconda/lib/python2.7/subprocess.py」,線路522,呼叫 回報文件「/Users/admirmonteiro/anaconda/lib/python2.7/subprocess.py」,第710行,在__init__中 errread,errwrite) 文件「/ Users/Popen(* popenargs,** kwargs).wait() 」 admirmonteiro/anaconda/lib/python2.7/subprocess.py「,第1335行,在_execute_child中 raise child_exception OSError:[Errno 8]執行格式錯誤 – Aboogie