在 Python 中将 ENTER 按键发送到没有 gui 的后台 exe

Posted

技术标签:

【中文标题】在 Python 中将 ENTER 按键发送到没有 gui 的后台 exe【英文标题】:Sending an ENTER Keypress to a Background exe without gui in Python 【发布时间】:2020-09-30 09:02:26 【问题描述】:

我需要向 后台 任务没有 GUI 发送一个 ENTER 键。听起来有点奇怪,所以解释一下:

可执行文件正在处理医疗数据(MRI 和 CT DICOM 图片)并创建自动化的“医疗前报告”。他们称之为人工智能。此可执行文件在数据中心的无头专用 Windows 2019 服务器上运行(没有可用的 Linux 二进制文件 - 我问过)。

负责此集群的他们公司**提供更新(许多更新)。他们为“AI”编写了一个单独的更新程序。

当我启动更新程序时,它会提示“找到新版本...”和“按 Enter 继续”。我不想每次他们提供更新时都连接并登录到服务器(通过 OpenSSH 隧道和 RDP 登录)。所以我写了一个简短的 Python 脚本来为我完成这项工作。我不告诉你细节,因为实际上知道有一个新的更新可用涉及一个 html 解析器和其他残酷的东西。

脚本工作正常,除了带有 ENTER 键的部分。那是因为服务器是数据中心的头。

所以我不能使用 pywinauto 或一些 autoit 宏来将窗口置于前面并按 Enter,因为更新程序在自动登录管理员帐户中没有窗口的情况下启动(另一个故事)。

我的想法是用 subprocess.popen 打开更新程序并生成一个管道来发送 Enter 键。但这没有用。更新程序启动,但未执行任何任务。

proc = subprocess.Popen([r"C:\Program Files\dicomai\ai.exe"], stdin=PIPE)
time.sleep(5)
proc.communicate(b"\n")

我没有想法和解决方法。

【问题讨论】:

这有帮助吗? ***.com/questions/12996985/… 很遗憾没有,我试过了。 (没有 GUI,没有窗口) 这个? pypi.org/project/keyboard 尤里卡。有用。太感谢了。今天已经花了我 5 个小时。 【参考方案1】:

我试过了,它对我有用

import subprocess
from subprocess import PIPE
import time

def doit():
    pr = subprocess.Popen([r"C:\Program Files\Mozilla Firefox\firefox.exe"],    stdin=PIPE)
    time.sleep(5)
    import pyautogui
    pyautogui.write("someurl.com\n")

doit()

尝试使用此库截取您的应用程序/桌面的屏幕截图以进行调试 - 有关详细信息,请参阅文档https://pyautogui.readthedocs.io/en/latest/screenshot.html

我也在无头服务器上运行它,它运行良好

【讨论】:

【参考方案2】:

我尝试了两个版本:

1) 来自 Ctznkane525 的 pypi.org/project/keyboard

2) 来自 jana 的 pyautogui.write("\n")

两者都在测试环境中完成了工作!谢谢!

【讨论】:

以上是关于在 Python 中将 ENTER 按键发送到没有 gui 的后台 exe的主要内容,如果未能解决你的问题,请参考以下文章

php 在textarea中将enter转换为br以发送短信

python给qq好友发送消息

在 Python 中使用“TAB”、“ENTER”打印条形码

在 python 中将数据发送到 Web 浏览器时出错

如何捕获 Enter 按键? [复制]

如何用 sendmessage 发送键盘按键消息