当我调用 pyautogui.click 函数时,单击会被执行,但随后程序会停止。当我按 ctrl+c 时,程序再次运行。
我简化了我的问题
import pyautogui
pyautogui.click(956, 222)
print("Hello")
您可能期望它会单击并打印,但它会单击,等到我按 ctrl+c 然后再打印。
它曾经有效。
我已经尝试过其他版本的 pyautogui,每次都一样。 我现在也用 win32api 尝试过,在遇到与 pyautogui 相同的问题后,它可以工作一次。
顺便说一句,我的第一篇文章,抱歉,如果语法突出显示错误
我不确定其原因的详细信息,但它是由于 print 语句而发生的。我知道如何解决这个问题的两种方法:
我在
pyautogui
和pynput
都面临同样的问题。
我通过将 pyautogui.click
放入单独的进程中,为您的案例找到了一个技巧:
import multiprocessing
import time
import pyautogui
def click_process(x, y):
pyautogui.click(x, y)
def click(x, y):
clicking = multiprocessing.Process(target=click_process, args=(x, y))
clicking.start()
time.sleep(1)
clicking.terminate()
if __name__ == '__main__':
click(956, 222)
print('Hello')
不幸的是,现在我面临另一个问题 - 该过程没有终止。程序按一下并按预期打印
Hello
,但它不会退出。此外,如果您在尝试终止后使用 multiprocessing.active_children()
打印活动子进程,您仍然会看到挂起的子进程。我尝试使用kill()而不是terminate(),并尝试使用os和psutil通过pid杀死它 - 仍然挂起。