Python 通过命令行有条件按键
我正在建立一个测试用例,我想用按键启动或停止计时器,但我不知道如何让我的例程保持活力g'应启动计时器(并不断重复),s'应停止计时器然后,g'可以启动计时器,等等。相反,“g”启动计时器,“s”什么也不做。我做错了什么 代码:Python 通过命令行有条件按键,python,macos,command-line,python-2.7,osx-lion,Python,Macos,Command Line,Python 2.7,Osx Lion,我正在建立一个测试用例,我想用按键启动或停止计时器,但我不知道如何让我的例程保持活力g'应启动计时器(并不断重复),s'应停止计时器然后,g'可以启动计时器,等等。相反,“g”启动计时器,“s”什么也不做。我做错了什么 代码: 尝试将循环移动到main函数中 def main(): result = 1 print 'starting time: ' , time.ctime() while(result): result = raw_input('press g to start timer,
尝试将
循环移动到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”)
?您的主要问题是,您正在尝试从标准输入中读取数据,但控制流被卡在打印功能中(在本例中,这是一个无限循环),无法从那里离开。换句话说,您希望在用户输入时读取“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
,该线程将检索按下的键,并相应地执行操作。我尝试了此操作,但现在代码没有运行。我将更新我的问题。现在问题中对问题进行了更详细的描述。好的,假设我不想调用sys.exit(),只想停止计时器。我尝试了一下,但又无法打断。这是我试图解决的问题的核心。@jml从上面的代码中选择sys.exit()
行只会停止计时器,您可以添加更多要从中执行的代码there@jml然后将else:
更改为elif结果为's':
,它将只执行sys.exit()
从命令行获取s
后(当然是在ctrl-c之后)@PALEN:以下是我想要的:1。启动程序2。按g键,计时器启动3。点击s,计时器停止4。点击g,定时器启动,等等。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()