首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何通过键绑定或宏退出Python程序或循环?键盘中断不工作

如何通过键绑定或宏退出Python程序或循环?键盘中断不工作
EN

Stack Overflow用户
提问于 2018-10-11 17:07:48
回答 1查看 1.9K关注 0票数 0

我正在尝试完成一个简单的GUI自动化程序,它只是打开一个网页,然后每隔0.2秒点击页面上的特定位置,直到我告诉它停止。我想让我的代码运行,并让它的循环无限地运行,直到我指定的键绑定中断循环(或整个程序)。我从经典的KeyboardInterrupt开始,它使CTRL+C能够退出程序。下面是我认为我的最终代码应该是什么样子的:

代码语言:javascript
代码运行次数:0
运行
复制
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键绑定退出键来导致中断,但无济于事:

代码语言:javascript
代码运行次数:0
运行
复制
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这样更简单的编程语言轻松地做这样的事情。我觉得我是在绕着解决方案跳舞。任何帮助都将不胜感激!提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2018-10-11 17:21:12

如果我理解正确的话,您希望能够通过按键盘上的一个键来停止您的程序。

以使您创建一个线程,如果您按下有问题的键,该线程将在后台签入。

下面是一个小示例:

代码语言:javascript
代码运行次数:0
运行
复制
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

希望能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52756289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档