Python 子进程中的按键?

Key press in a Python subprocess?

try:
    subprocess.run(exe_path)
    keyboard.press_and_release('enter')
    print('Successful Extracted')
except Exception as exe:
    print(exe.args)
    keyboard.press_and_release('enter')

重点是 运行 windows 的 EXE,但它需要键盘输入才能结束它的进程,除非物理上给出键盘输入,否则它会一直卡在那里。现在我正面临一个问题

subprocess.run('some_exe')

是运行正在处理并且成功后运行询问

Press Any Key To Exit

虽然我已经在subprocess.run

旁边提到了

keyboard.press_and_release('enter')

除非我们手动按下键盘上的按钮,否则它将进入下一行

注意:python3.8

您可以创建一个 .vbs 文件到 运行 您的 .exe 文件或 python 脚本而无需控制台调试 window:

Set oShell = CreateObject ("Wscript.Shell") 
Dim strArgs
strArgs = "cmd /c  python main.py"
oShell.Run strArgs, 0, false

如果您有 .exe 文件,只需将 python main.py 替换为 yourFile.exe

为了一个可重现的例子,假设我们想 运行 下面的 Python 脚本作为子进程,我们称它为 script.py.

input('Press Enter to exit.')

它不会终止,直到用户按下 Enter 键。如果我们想模拟按键,我们可以使用 Popen.communicate 向子进程的 stdin 发送一个换行符。像这样:

from subprocess import Popen, PIPE

process = Popen(['python', 'script.py'], stdin=PIPE, text=True)
process.communicate('\n')

外部程序不必是Python脚本,它可以是任何可执行文件。只需将 ['python', 'script.py'] 替换为相应的命令行调用,例如['some_exe'].

显然,如果外部程序接受 any 退出键,这也有效。仅发送没有明显文本表示的特殊键,例如 F1,会使事情复杂化。