2010-07-16 38 views
0

有一個期望鍵盤輸入腳本進行交互, 我可以調用腳本使用os.system(「./腳本」)在python,如何與外部腳本(程序)

怎麼可能從另一個調用腳本發回輸入到腳本?

更新:

的腳本是:

$ cat script 
#!/usr/bin/python 
for i in range(4): 
     name=raw_input('enter your name') 
     print 'Welcome %s :) ' % name 

當我沒有嘗試循環,它的工作原理,但它表明,只有當腳本退出輸出。

>>> p = subprocess.Popen('./script',stdin=subprocess.PIPE) 
>>> p.communicate('navras') 
enter your nameWelcome navras :) 

當我嘗試它與福爾循環,它會拋出錯誤,如何顯示報表交互性和當標準輸出與新的打印語句

>>> p.communicate('megna') 
enter your nameWelcome megna :) 
enter your nameTraceback (most recent call last): 
    File "./script", line 3, in <module> 
    name=raw_input('enter your name') 
EOFError: EOF when reading a line 
(None, None) 

回答

1

你可以用它代替子更新使用os.system:

p = subprocess.Popen('./script',stdin=subprocess.PIPE) 
p.communicate('command') 

它不是testet

+0

這些提法應該給予更多的細節: http://docs.python.org/library/subprocess.html http://jimmyg.org/blog/2009/working-with-python-subprocess.html 在上面的例子中,您可能還想添加參數'stdout = subprocess.PIPE'。通信函數應該返回一個元組'(stdout,stderr)',並將數據發送到這些描述符中的每一個。 你也可以嘗試'p.stdin.write()'和'p.stdout.readline()'。真的,你可以像處理任何其他文件對象一樣對待'p.stdin'和'p.stdout' :) – 2010-07-16 11:40:34

+0

當我用foor循環嘗試它時,它會引發錯誤,如何顯示交互式語句以及何時使用新的打印語句更新stdout。 >>> p.communicate( 'megna') 輸入您nameWelcome megna :) 輸入您nameTraceback(最新最後調用):在 名的raw_input =文件 「./script」,3號線,(」輸入你的名字') EOFError:讀取一行時的EOF (None,None) – 2010-07-16 11:50:41

-2

事實上,使用os.system和os.p現在不推薦使用open,並且subprocess是處理所有子進程交互的推薦方式。