【问题标题】:Why program executes correctly for subprocess.Popen calling one .exe but not the other?为什么程序正确执行 subprocess.Popen 调用一个 .exe 而不是另一个?
【发布时间】:2022-01-17 17:06:17
【问题描述】:

所以我试图运行一个简单的 subprocess.Popen 来运行程序的 GUI,然后使用 pyautogui 进行一堆自动点击。我遇到了一个问题,当我将一条路径放置到 GUI 时,它会打开 GUI 并且点击工作正常。但是,当我将它替换为不同 GUI 的路径时,不会发生点击,但是,它会打印出“完成的点击”,表明程序确实完全执行了。然而,我很困惑,为什么这些点击没有发生。这是我的代码。

def gui_call_thread():
    subprocess.Popen(["C:\\Program Files (x86)\\Arduino\\arduino.exe"], shell = True)
    # works for C:\\Program Files (x86)\\Arduino\\arduino.exe
    # does not work for C:\\Program Files (x86)\\Texas Instruments\\TX7316 EVM\\TX7316 EVM.exe
    time.sleep(10) # wait for GUI to load before executing clicks
    pyautogui.click(1076,537)
    time.sleep(0.5)
    pyautogui.click(1065,558)
    time.sleep(0.5) 
    pyautogui.click(1060,643)
    print('Executing...')
    time.sleep(3)
    pyautogui.click(224,110)
    time.sleep(0.5)
    pyautogui.click(249,135)
    time.sleep(0.5)
    pyautogui.click(922,507)
    time.sleep(0.5)
    pyautogui.click(1139,459, clicks = 2)
    print('Finished Clicks')  

gui_call_thread()

【问题讨论】:

  • 如果除了你之外没有人拥有这两个文件,我们该怎么说?
  • 顺便说一句,我通常建议避免使用shell=True,除非您有特定且令人信服的理由来使用它。启动 shell 可以隐藏真正的错误,因为问题会报告给 shell,而不是调用者。
  • 你不能在相同的位置点击两个不同的程序并假设它做了什么。这些坐标有意义吗?您如何识别成功的点击?
  • @ThomasWeller 它没有做同样的事情,但关键是点击实际上是在调用一个程序时发生的,而在另一个程序中根本不会发生。点击可能不会做任何事情,但至少它们是可见的并且在一种情况下会发生,对吗?
  • @CharlesDuffy 我试图避免这种情况,但是当我将其设置为 False 时出现操作系统权限错误,所以我认为我需要使用它。

标签: python subprocess popen


【解决方案1】:

我相信我解决了这个问题,简单地说,代码正在点击,但我试图自动化的 gui 有 2 层,一个弹出类型层和一个下 gui。简单地说,点击正在发生,但不是在我想要的屏幕层上。

【讨论】:

  • 请编辑您的帖子(可能带有代码)让大家知道
  • 如果问题的解决方式不太可能帮助其他有类似问题的人,最好删除问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-12
  • 2019-09-07
  • 2018-07-30
  • 1970-01-01
相关资源
最近更新 更多