我有一个简单的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控制台上,而不是进程。
是否可以自动执行此类操作?或者我错过了一些基本的东西..
答案 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''
字节文字创建)。)