Popen和stdin自动输入.exe

时间:2014-09-19 03:53:14

标签: python stdin popen

我有一个简单的Windows可执行文件,要求用户输入,我正在尝试创建一个python脚本来自动输入。 我做了什么:

from subprocess import Popen, PIPE
p = Popen([r'myprgm.exe'], stdin=PIPE)
p.communicate(input=bytes(input("Test Input"), 'UTF-8'))

现在,通常在程序运行时,它会输出到命令提示符“给我输入:”,然后期望来自用户的输入。

如果我使用带有stdin=PIPE选项的Popen,根本没有任何内容写入命令提示符 - 它只是空白。

然后,当我使用通信时,“测试输入”最终在python控制台上,而不是进程。

是否可以自动执行此类操作?或者我错过了一些基本的东西..

2 个答案:

答案 0 :(得分:2)

您可以将input提供给communicate功能。

喜欢

p1 = Popen(["mycmd"], stdin=PIPE, stdout=PIPE)
output = p1.communicate(input="my input")[0]

答案 1 :(得分:0)

  

"测试输入"最终在python控制台上

您会看到输出,因为input(prompt) function会打印它。如果您想将Test Input字面上传递给子流程,请删除input()调用:

#!/usr/bin/env python
from subprocess import Popen, PIPE

p = Popen('myprgm.exe', stdin=PIPE)
p.communicate(input=b"Test Input")

无法保证myprgm.exe在Windows上接受utf-8输入(它可能接受使用Windows控制台OEM编码编码的输入,例如cp437或Windows cp1252等Windows ANSI编码)因此bytes(unicode_string, 'utf-8')输入可能是错误的。应该可以在ascii范围内传递一个带字节的字节串(使用b''字节文字创建)。)