【问题标题】:How do I abort reading a user's input in Python 3.x?如何在 Python 3.x 中中止读取用户的输入?
【发布时间】:2015-09-11 15:12:50
【问题描述】:

我有一个监控用户输入的线程,如下所示:

def keyboard_monitor(temp): #temp is sys.stdin
global flag_exit

while True:
    keyin = temp.readline().rstrip().lower()
    if keyin == "exit":
        flag_exit = True
        print("Stopping...")

    if flag_exit == True:
        break

如果我输入 exit 标志被正确设置并且所有其他线程终止。如果我的另一个线程设置了标志,则该线程拒绝完成,因为它挂在用户输入上。我必须输入一些东西才能完成。如何更改此代码,以便在外部设置标志时程序完成?

【问题讨论】:

  • 开始查看select 模块。
  • 你可以试试temp.close()。不知道会有什么影响。
  • 是否需要跨平台或仅适用于 Unix 或 Windows?
  • 调查 Alex Martelli 的 Post 并使用 msvcrt.kbhit()
  • 如果你想要x平台,可以使用Tkinter

标签: python multithreading python-3.x user-input


【解决方案1】:

如果没有更多代码,很难准确判断出了什么问题,但作为一个简单的解决方案,你可以宁愿 exit() 这是一个内置的 python。这应该可靠地终止应用程序,也 sys.exit()

来自wim的评论:

您可以使用atexit 模块注册清理处理程序

import atexit

def cleanup():
   pass
   # TODO cleanup

atexit.register(cleanup)

【讨论】:

  • 在给出带有链接的答案时,通常首选将解决方案的关键部分直接复制到答案中
  • 谢谢,我会记得这样做的
  • 我必须做一些家务(关闭文件句柄等),所以我不能只调用 exit。
  • 你知道atexit模块吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
  • 1970-01-01
相关资源
最近更新 更多