首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python诅咒:快速退出程序

Python诅咒:快速退出程序
EN

Stack Overflow用户
提问于 2016-10-06 01:46:51
回答 2查看 2.7K关注 0票数 2

使用诅咒模块的无限循环快速退出Python程序的最佳方法是什么?

我尝试在循环的末尾添加nodelay()方法,并将其与此结合起来:

代码语言:javascript
复制
if screen.getch() == ord('q'):
    break

然而,在循环的一次迭代中进行所有函数调用需要2-3秒。由于这个应用程序,比每5秒更频繁地运行循环是没有意义的。这意味着,为了使我退出程序的方式工作,我有时不得不按下'q‘,保持2-8秒。

我的代码如下所示:

代码语言:javascript
复制
import curses
import time

def main(screen):
    refresh_rate = 5
    screen.nodelay(1)

    # Infinite loop. Displays information and updates it 
    # every (refresh_rate) # of seconds

    while True:

        # Makes several http requests 
        # and passes responses through multiple functions

        # Escape infinite loop
        if screen.getch() == ord('q'):
            break

        # Wait before going through the loop again
        time.sleep(refresh_rate)

if __name__ == "__main__":
    curses.wrapper(main)

我的另一个解决方案是将with替换为:

代码语言:javascript
复制
loop = 1
while loop:

    #Loop code

if screen.getch() == ord('q'):
    loop = -1

这样,就没有必要按下并持有'q‘退出程序。但在按一次“Q”键后,它仍然需要8秒的时间才能退出。

由于明显的原因,这似乎不是退出程序的最佳方式。我很确定应该有一个更好(更快)的解决方案。

除此之外,这个程序运行得很好。这是两个文件,超过300行,所以我只是张贴的相关部分的代码与我的尝试解决方案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-06 08:58:33

考虑到您已经没有延迟,通常的方法是使用时间较短(20-50毫秒)的凝固汽油,并设定5秒的目标,在多次(10-25)重复getch/凝固汽油循环之后运行这些函数。

混合诅咒和标准I/O并不是很好,除非你在两者之间切换时小心地冲洗东西。

票数 2
EN

Stack Overflow用户

发布于 2016-10-06 02:40:14

可能发生的情况是,您的'q'getch()sleep调用之间出现。假设getch()只需执行一小部分秒,并且sleep锁定程序5秒,那么很可能在任何时候按下键都会等待。

退出任何python脚本的最简单方法是按Ctrl-C --它会产生一个KeyBoardInterrupt异常,可以这样处理:

代码语言:javascript
复制
try:
while True:
    do_something()
except KeyboardInterrupt:
    pass

当然,如果这是一个面向用户的应用程序,这可能是不够的.但是,没有完整的事件循环和允许它们退出的UI,任何生产应用程序都不可能运行。

最后,如果您想要另一种方式来完成您已经在做的事情,您可以使用:

代码语言:javascript
复制
import sys
sys.stdin.read(1)

一次读取用户输入的1拜。如果我是你,我会选择Ctrl-C路线。

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

https://stackoverflow.com/questions/39886252

复制
相关文章

相似问题

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