我正在尝试完成一个简单的GUI自动化程序,它只是打开一个网页,然后每隔0.2秒点击页面上的特定位置,直到我告诉它停止。我想让我的代码运行,并让它的循环无限地运行,直到我指定的键绑定中断循环(或整个程序)。我从经典的KeyboardInterrupt开始,它使CTRL+C能够退出程序。下面是我认为我的最终代码应该是什么样子的:
import webbrowser, pyautogui, time
webbrowser.open('https://example.com/')
print('Press Ctrl-C to quit.')
time.sleep(5)
#pyautogui.moveTo(1061, 881)
try:
while True:
time.sleep(0.2)
pyautogui.click(1061,881)
except KeyboardInterrupt:
print('\nDone.')
代码的一切都能正常工作,除了一旦点击循环开始我就不能退出。无论出于何种原因,键盘中断和使用CTRL-C退出对此脚本都不起作用。
我只希望能够按下“退出”(或任何其他键)来退出循环(或完全退出程序)-任何方式都可以让循环退出并停止。现在它运行ad infinitum,但我想要一个简单的键绑定宏来停止/中断它。
我尝试过使用getch键绑定退出键来导致中断,但无济于事:
import webbrowser, pyautogui, time, msvcrt
webbrowser.open('https://example.com')
print('Press Ctrl-C to quit.')
time.sleep(5)
#pyautogui.moveTo(1061, 881)
try:
while True:
time.sleep(0.2)
pyautogui.click(1061,881)
if msvcrt.kbhit():
key = ord(readch())
if key == 27:
break
我很惊讶在Python中这么难做到这一点。我在Stackoverflow上检查了很多类似的问题,但都没有令人满意的答案,不幸的是,没有一个能解决我的问题。我已经能够用像AuotHotKeys这样更简单的编程语言轻松地做这样的事情。我觉得我是在绕着解决方案跳舞。任何帮助都将不胜感激!提前谢谢。
发布于 2018-10-11 17:21:12
如果我理解正确的话,您希望能够通过按键盘上的一个键来停止您的程序。
以使您创建一个线程,如果您按下有问题的键,该线程将在后台签入。
下面是一个小示例:
import threading, time
from msvcrt import getch
key = "lol"
def thread1():
global key
lock = threading.Lock()
while True:
with lock:
key = getch()
threading.Thread(target = thread1).start() # start the background task
while True:
time.sleep(1)
if key == "the key choosen":
# break the loop or quit your program
希望能有所帮助。
https://stackoverflow.com/questions/52756289
复制相似问题