Popen和stdin将自动输入到.ex

2024-09-30 01:37:32 发布

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

我有一个简单的windows可执行文件,它要求用户输入,我正试图编写一个python脚本来自动输入。 我所做的:

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

现在,通常当程序运行时,它输出到命令提示符“givemeinput:”然后期望用户输入。在

如果我将Popen与stdin=PIPE选项一起使用,则不会向命令提示符写入任何内容—它只是空白。在

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

像这样的事情有可能自动化吗?或者我在这里遗漏了一些基本的东西。。在


Tags: 用户fromimport脚本可执行文件inputwindowsstdin
2条回答

您可以将input赋予^{}函数。在

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

"Test Input" ends up on the python console

您看到输出是因为^{} 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 ANSI编码(如cp1252)编码的输入),因此{}输入可能错误。传递字节在ascii范围内的bytestring应该是可以的(使用b''bytes literal创建的)。在

相关问题 更多 >

    热门问题