2010-07-16 63 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是处理所有子进程交互的推荐方式。