如何从python运行可执行文件,并将要求的参数传递给它?

如何从python运行可执行文件,并将要求的参数传递给它?,python,command,subprocess,Python,Command,Subprocess,我不知道如何从python运行可执行文件,然后再传递命令,这是一个接一个的要求。我在这里找到的所有示例都是通过在调用可执行文件时直接传递参数来实现的。但我拥有的可执行文件需要“用户输入”。它一个接一个地请求值 例如: subprocess.call(grid.exe) >What grid you want create?: grid.grd >Is it nice grid?: yes >Is it really nice grid?: not really >Grid

我不知道如何从python运行可执行文件,然后再传递命令,这是一个接一个的要求。我在这里找到的所有示例都是通过在调用可执行文件时直接传递参数来实现的。但我拥有的可执行文件需要“用户输入”。它一个接一个地请求值

例如:

subprocess.call(grid.exe)
>What grid you want create?: grid.grd
>Is it nice grid?: yes
>Is it really nice grid?: not really
>Grid created

您可以使用
子流程
和以下方法:

“communicate”方法实质上是传入输入,就好像您正在键入输入一样。确保用换行符结束每一行输入

如果希望控制台上显示来自
grid.exe
的输出,请修改
create\u grid
如下所示:

def create_grid(*commands):
    process = subprocess.Popen(
        ['grid.exe'],
        stdin=subprocess.PIPE)

    process.communicate('\n'.join(commands) + '\n')

警告:我还没有完全测试我的解决方案,因此无法确认它们在每种情况下都有效。

您可以将命令序列写入一个文件,并让可执行文件从该文件获取输入。@Jayanth谢谢。我知道如何用python创建文本文件并在其中写入行,为什么不呢。但是我如何让可执行文件读取输入(文本)文件呢?谢谢。我复制了这个,只将参数更改为几个,但我得到了错误:self.stdin.write(input)TypeError:“str”不支持缓冲区interface@Miro--您是否碰巧正在使用Python 3?如果是这样的话,您可能需要在调用
通信之前先进行通信
。(再一次,我不能100%确定这是否是实际问题)是的,Windows7上的PortablePython_3.2.5.1。我会试试的,谢谢。太棒了,真管用!非常感谢你。对于Python3,我所要做的就是将最后一行写为process.communicate(字节('\n'.join(commands)+'\n',UTF-8'))
def create_grid(*commands):
    process = subprocess.Popen(
        ['grid.exe'],
        stdin=subprocess.PIPE)

    process.communicate('\n'.join(commands) + '\n')