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

2024-04-18 21:57:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我可以使用

subprocess.call(["do_something.bat"])

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

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

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


Tags: 文件项目用户程序版本框架信息stdin
2条回答

这在一定程度上取决于do_something.bat如何提示用户。你知道吗

如果它只是从标准输入中读取数据,那么您的程序就可以充当中间人。它可以提示do_something.bat的输出,读取用户的响应,然后通过管道将响应返回到do_something.bat的标准输入。你知道吗

否则,我认为不调整do_something.bat是不可能的。你知道吗

如果您知道程序将请求什么样的确切参数以及它将请求它们的顺序,那么您可以自己收集参数并将它们转发给子进程。你知道吗

例如

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" 

相关问题 更多 >