通过命令行实现条件按键
我正在创建一个测试案例,想要通过按键来启动或停止一个计时器,但我不知道怎么让我的程序一直运行下去……按下'g'应该启动计时器(并不断重复),而按下's'应该停止计时器。然后'g'可以再次启动计时器,等等。但是现在,按下'g'可以启动计时器,而按下's'却没有任何反应。我哪里出错了?
代码:
#!/usr/bin/env python
import time, sys
def print_something(status):
while(status):
print 'the time: ' , time.ctime()
time.sleep(1);
def main():
result = 1
print 'starting time: ' , time.ctime()
result = raw_input('press g to start timer, s to stop.\n')
while(result is 'g'):
print_something(True)
result = ''
result = None
time.stop()
main()
2 个回答
-1
试着把你的 while
循环放到 main
函数里面。
def main():
result = 1
print 'starting time: ' , time.ctime()
while(result):
result = raw_input('press g to start timer, s to stop.\n')
if result is 'g':
print_something()
result = ''
elif result is 's':
result = None
time.stop()
sys.exit()
更新:你有没有试着检查一下 while(result != 's')
呢?
1
你的主要问题是,你想从 stdin
读取输入,但程序的控制流程被卡在 print_something
函数里(在这种情况下是一个无限循环),所以根本无法跳出来。换句话说,你想读取用户输入的 's',但是这部分代码在循环结束之前是不会执行的。
你需要某种形式的 中断。下面的代码可以实现你想要的功能,不过用户需要按 "Ctrl+C" 来停止计时器。
#!/usr/bin/env python
import time, sys
def main():
result = 1
print 'starting time: ' , time.ctime()
while(result):
result = raw_input('press g to start timer, ctrl+c to stop.\n')
if result is 'g':
print_something()
result = ''
else:
result = None
time.stop()
sys.exit()
def print_something():
while 1:
try:
print 'the time: ' , time.ctime()
time.sleep(1);
except KeyboardInterrupt:
break
main()
编辑:
我想要的功能是:1. 启动程序 2. 按 g,计时器开始 3. 按 s,计时器停止 4. 再按 g,计时器开始,依此类推。CTRL-C 不应该是停止计时器的方式,而是用来结束程序。
那么,你的编程思路需要改变。你需要考虑一种 事件驱动的程序,它会对像按键这样的事件做出反应。也许你需要创建一个 线程,用来检测按下了哪个键,并在按下 s
或 g
时做出相应的反应,而另一个线程则负责打印时间。