我有一个测试用例我正在构建,我想用按键开始或停止计时器,但我无法弄清楚如何保持我的日常生活...'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()
答案 0 :(得分: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不应该这样 停止计时器,而是杀死程序。
然后编程范式必须改变。您正在考虑Event-driven program响应按键等事件。也许您需要创建一个线程,它会检索按下哪个键并在按下s
或g
时按相应动作,而另一个线程打印时间。
答案 1 :(得分:-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')
?