为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Smart猫小萌 2023-01-04 16:48:58

我需要将 ENTER 按键发送到没有 GUI的后台任务。听起来有点奇怪,所以这里是解释:


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


They Company who responsible for this clusterfu** 提供更新(许多更新)。他们为“AI”编写了一个单独的更新程序。


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


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


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


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


proc = subprocess.Popen([r"C:\Program Files\dicomai\ai.exe"], stdin=PIPE)

time.sleep(5)

proc.communicate(b"\n")

我没有想法和解决方法。


查看完整描述

2 回答

?
慕姐4208626

TA贡献1579条经验 获得超7个赞

我试过了,对我有用


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


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


查看完整回答
反对 回复 2023-01-04
?
米琪卡哇伊

TA贡献1736条经验 获得超6个赞

我尝试了两个版本:

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

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

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


查看完整回答
反对 回复 2023-01-04

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信