根据用户输入提前退出循环而不在每次迭代中提示
我有一个程序运行得非常慢,我希望它能完成需要做的事情,但如果用户按下特定的键,我希望循环能在某个点停止。大多数关于这个问题的问答都建议在每次循环时让用户输入一些东西,但我不想这样。我希望循环能够不受干扰地运行,直到需要退出。
这个脚本会在命令提示符(Windows)中作为可执行文件运行,所以我想用户可以直接关闭窗口,但我希望循环能在特定的时刻停止。例如:
while True:
print "Doing whatever I feel like"
userinput = raw_input()
if userinput == 'q':
break
这样程序会一直打印,直到用户输入 'q',但它在每次循环时都要提示用户输入。我该怎么做才能避免这种情况呢?
4 个回答
1
有两种可能的解决办法:
1. 按下 Ctrl-C 来关闭你的程序。这在 Linux 系统上也可以用。
2.
while True:
for _ in range(100)
print "Doing whatever I feel like"
userinput = raw_input()
if userinput == 'q':
break
这个方法每100次循环才会询问用户一次。
1
你可以开启一个单独的线程来进行你需要的计算,条件是 while self.flag == False
。这样,主程序就可以在那儿等着用户输入。当用户输入完成后,设置 Thread.flag = True
,这样就可以停止这个线程了。然后等这个线程完成工作并合并(join),最后你就可以退出主程序了。
2
如果你不需要在某个特定的地方停止程序,只是想要能够随时停止它,你可以使用try/except来处理键盘中断(也就是按下Ctrl-C)。
try:
while True:
print "Doing whatever I feel like"
except KeyboardInterrupt:
exit
当用户按下CTRL-C时,程序就会退出。
1
或者这样:
import msvcrt
while True:
print "Doing whatever I feel like"
if msvcrt.kbhit(): # True if a keypress is waiting to be read.
if msvcrt.getch()=="q": # will not wait for Enter to be pressed
break
可以查看一下 msvcrt 的文档。