问题
So I've been doing a little bit of reading up on how to exit a while loop by the user pressing the enter key and I've come up with the following:
import sys, select, os
switch = 1
i = 1
while switch == 1:
os.system('cls' if os.name == 'nt' else 'clear')
print "I'm doing stuff. Press Enter to stop me!"
print i
while sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
line = raw_input()
if not line:
print "Finished! =]"
switch = 0
else:
print "Finished! =]"
switch = 0
i = i+1
Is there a way to tidy this up? In particular the "if not line" and the following "else" look messy. Can they be combined into one? A better alternative to using "switch"?
Initially if I typed a bunch of characters and then hit enter it didn't stop the loop. I would have to press enter again. The if not and else components are intended to set it up such that it would exit on the first press of enter.
回答1:
This worked for me:
import sys, select, os
i = 0
while True:
os.system('cls' if os.name == 'nt' else 'clear')
print "I'm doing stuff. Press Enter to stop me!"
print i
if sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
line = raw_input()
break
i += 1
You only need to check for the stdin being input once (since the first input will terminate the loop). If the conditions line/not line have result for you, you can combine them to one if statement. Then, with only one while
statement being used, you can now use break
instead of setting a flag.
来源:https://stackoverflow.com/questions/22391134/exiting-while-loop-by-pressing-enter-without-blocking-how-can-i-improve-this-me