如何通过keybind或macro退出Python程序或循环?键盘中断不工作

2024-05-15 15:43:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试完成一个简单的GUI自动化程序,它只打开一个网页,然后每隔0.2秒单击页面上的某个特定位置,直到我告诉它停止。我想让我的代码运行,让它的循环无限地运行,直到我指定的keybind中断循环(或整个程序)。我从经典的键盘中断开始,它允许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退出对于这个脚本根本不起作用。在

我只想能够按“escape”(或任何其他键)退出循环(或整个程序)——只是任何让循环退出并停止的方法。现在它无限运行,但我想要一个简单的keybind宏来停止/中断它。在

我曾尝试使用getch键绑定escape键以引起中断,但没有成功:

^{pr2}$

我很惊讶在Python中这么难做到这一点。我在Stackoverflow上检查过很多类似的问题,但都没有得到令人满意的答案,不幸的是,没有一个能解决我的问题。我已经能够用更简单的编码语言(比如auotkey)轻松地完成这类事情。我觉得我在绕着解决方案跳舞。任何和所有的帮助将是非常感谢!提前谢谢。在


Tags: 代码程序网页timeguisleep页面键盘
1条回答
网友
1楼 · 发布于 2024-05-15 15:43:55

如果我没听错,你想通过按键盘上的键来停止你的程序。在

使你创建一个线程,如果你按下有问题的键,它将在后台进行检查。在

一个小例子:

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

希望它能有所帮助。在

相关问题 更多 >