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

是否可以调用一个程序并用Python获取该程序的输入?,python,python-2.7,Python,Python 2.7,我可以使用 subprocess.call(["do_something.bat"]) 我想知道我是否可以收集do_something.bat do_something.bat是Java程序的启动程序,Java程序将提示用户输入项目名称、版本等项目特定信息,并根据用户输入生成项目框架 我使用python调用这个do_something.bat,在它生成所有项目文件后,我需要继续转到项目根目录下的特定目录,但这需要知道项目名称,我可以得到用户以前输入的项目名称吗?这取决于如何做某事。bat提示用

我可以使用

subprocess.call(["do_something.bat"])
我想知道我是否可以收集
do_something.bat

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


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

这取决于
如何做某事。bat
提示用户

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


否则,我认为如果不调整
do\u something.bat
,就不可能实现

这取决于
如何做某事。bat
提示用户

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


否则,我认为如果不调整
do\u something.bat
,就不可能实现

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

例如


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

例如


你不能自己收集这些值,然后做任何
做的事情。bat
做或执行它吗?这是你的问题的答案吗?@silenghost这就是我所想的-我想有可能替换stdin程序并这样做,但这似乎是一种复杂的方法…@silenghost
做点什么。bat
只做了整个工作的一小部分,我没有办法改变这一点。我需要那些它提示用户输入的输入。这个程序只是直接从stdin中提取输入,还是也直接与TTY通信?如果它执行密码提示(并且由任何具有适度安全意识的人编写),则后者几乎肯定是这样。[编辑:哦--你在Windows上;可能在那里没有意义]。你不能自己收集这些值,然后做任何
做的事情。bat
做或执行它吗?这是你的问题的答案吗:?@SilentGhost这是我在想的-我想有可能替换stdin程序并这样做,但这似乎是一种复杂的方法…@silenghost
做点什么。bat
只做了整个工作的一小部分,我没有办法改变这一点。我需要那些它提示用户输入的输入。这个程序只是直接从stdin中提取输入,还是也直接与TTY通信?如果它执行密码提示(并且由任何具有适度安全意识的人编写),则后者几乎肯定是这样。[编辑:哦--你在Windows上;可能在那里没有实际意义]。
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"