我可以使用
在Python中调用另一个程序subprocess.call(["do_something.bat"])
我想知道我是否可以收集do_something.bat
的stdin输入?
do_something.bat
是Java程序的启动程序,Java程序将提示用户输入项目特定信息,如项目名称,版本,并将根据用户输入生成项目框架。
我使用python来调用这个do_something.bat
,在它生成所有项目文件之后,我需要继续转到项目根目录下的特定目录,但这需要知道项目名称,我可以得到用户先前输入的项目名称?
答案 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"