是否可以调用程序并在Python中获取该程序的输入?

时间:2012-11-12 15:01:00

标签: python python-2.7

我可以使用

在Python中调用另一个程序
subprocess.call(["do_something.bat"])

我想知道我是否可以收集do_something.bat的stdin输入?

do_something.bat是Java程序的启动程序,Java程序将提示用户输入项目特定信息,如项目名称,版本,并将根据用户输入生成项目框架。

我使用python来调用这个do_something.bat,在它生成所有项目文件之后,我需要继续转到项目根目录下的特定目录,但这需要知道项目名称,我可以得到用户先前输入的项目名称?

2 个答案:

答案 0 :(得分:2)

这取决于do_something.bat如何提示用户。

如果只是从标准输入读取,您的程序可以充当中间人。它可以提示do_something.bat的输出,读取用户的响应,然后将响应传回do_something.bat的标准输入。

否则,如果不改编do_something.bat,我认为不可能。

答案 1 :(得分:1)

如果您知道程序要求的确切参数以及它将要求的顺序,那么您可以自己收集参数并将它们转发到子流程。

例如

from subprocess import Popen, PIPE

# get inputs
input1 = ...
input2 = ...

child = Popen("do_something.bat", stdin=PIPE)
# Send data to stdin. Would also return data from stdout and stderr if we set 
# those arguments to PIPE as well -- they are returned as a tuple
child.communicate("\n".join([input1, input2, ...]))

if child.returncode != 0:
    print "do_something.bat failed to execute successfully"