我正在使用GIMP做一些自动化测试用例。我需要启动该程序并将鼠标/键盘操作发送给它。我正在使用subprocess.call()
启动程序,并使用pyautogui
发送鼠标/键盘操作。
import pyautogui
import subprocess
subprocess.call('gimp', shell=True)
gimp_file = pyautogui.locateOnScreen('imgs/gimp_file.png', grayscale=True,region=(5, 28, 29, 19))
file_button_x, file_button_y = pyautogui.center(gimp_file)
pyautogui.click(file_button_x, file_button_y, duration=0.75)
我遇到的问题是代码的pyautogui
部分从未被命中,程序似乎只是挂起了。我已经在PyCharm中通过调试器运行,并且没有返回任何变量。如果我在python控制台中运行subprocess.call('gimp')
,其余代码在另一个控制台中运行,则它会执行应有的操作。我认为可能是由于程序启动或窗口焦点引起的时间延迟;我添加了time.sleep(5)
以解决前一个原因,但没有任何影响。我该如何解决?
答案 0 :(得分:1)
subprocess.call()
将等待该过程退出-不会发生(除非您退出GIMP),也不希望它等待。您应该使用subprocess.Popen()
,并将stdin
设置为subprocess.DEVNULL
,并且stdout/stderr
可以单独使用,也可以重定向到DEVNULL
。这将允许您的程序在GIMP运行时继续进入pyautogui
行。
请注意,gimp将显示初始屏幕,因此您可能需要稍等片刻,然后才能尝试找到其窗口并在其中单击。