2012-04-30 155 views
1

我試圖編寫一個程序,運行一些shell命令與模擬用戶數據。Python pexpect沒有按預期工作

的問題是shell命令不正確沒有這一行代碼的末尾運行:

raw_input('press <enter> to exit') 

我怎麼能擺脫線的?

child = pexpect.spawn('grunt init:gruntfile') 
child.logfile_read = sys.stdout 

child.expect ('Is the DOM involved in ANY way?') 
child.sendline ('y') 
child.logfile_read = sys.stdout 

child.expect ('Will files be concatenated or minified?') 
child.sendline ('y') 
child.logfile_read = sys.stdout 

child.expect ('Will you have a package.json file?') 
child.sendline ('y') 
child.logfile_read = sys.stdout 

child.expect ('Do you need to make any changes to the above before continuing?') 
child.sendline ('n') 
child.logfile_read = sys.stdout 

raw_input('press <enter> to exit') 
+0

這是一個笑話的標題;-) – puk

回答

6

的問題似乎是,如果沒有到的raw_input拖慢了程序,完成子進程之前,你的Python腳本正在退出(並在此過程殺死子進程)。

我認爲pexpect.wait()應該處理這種情況,但它聽起來像the documentation像wait()會掛起如果在子進程退出後有未讀輸出,並且不知道子進程的細節我不能說無論是否存在將會發生的風險。 read()和wait()的某種組合可能會起作用,或者如果找出這個問題太麻煩了,你可以用time.sleep()幾秒鐘。

+0

等待()做到了。非常感謝! – Theadamlt

+0

從文檔中,它聽起來像'read()'應該使用。在沒有參數的情況下,它會讀取,直到獲得EOF。不像'read_nonblocking()',它應該被阻塞,等待進程完成。 – geon