制作“任何键”可互换的Python计时器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了制作“任何键”可互换的Python计时器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1487字,纯文字阅读大概需要3分钟。
内容图文
我正在尝试制作一个简单的计时器,直到被键盘输入打断为止.
现在我正在使用CTRL C停止计时器,但是我想做一些更简单的事情,例如按空格键或Enter键或“任何键”.我听说可以通过线程模块完成此操作,但是经过几次尝试,我显然不知道自己在做什么.
这是我当前的代码:
def countup():
try:
a=0
for i in range(1000000) :
print i,'\r',
time.sleep(1)
except KeyboardInterrupt:
Z = raw_input("restart timer?" )
if Z == "Y" or Z == "y" :
countup()
解决方法:
使用thread和terminal capabilities可以编写(按任意键停止):
import thread
import time
def read_key():
import termios
import sys
fd = sys.stdin.fileno()
old = termios.tcgetattr(fd)
new = termios.tcgetattr(fd)
new[3] &= ~(termios.ICANON | termios.ECHO) # c_lflags
c = None
try:
termios.tcsetattr(fd, termios.TCSANOW, new)
c = sys.stdin.read(1)
finally:
termios.tcsetattr(fd, termios.TCSANOW, old)
return c
def input_thread():
read_key()
thread.interrupt_main()
def countup():
try:
thread.start_new_thread(input_thread, ())
for i in range(1000000):
print i
time.sleep(1)
except KeyboardInterrupt:
Z = raw_input("restart timer? ")
if Z == 'y' or Z == 'Y':
countup()
让我们澄清一下:
thread.start_new_thread()使用input_thread()作为启动函数创建一个新线程.在thread.interrupt_main()时,在主线程中引发KeyboardInterrupt.
termios.tcgetattr()返回当前终端属性. ?termios.ICANON取消设置canonical模式,?termios.ECHO阻止输入打印,然后termios.tsetattr()进行更改.
或者,在Windows上,可以使用msvcrt中的getch()代替read_key()
def input_thread():
msvcrt.getch()
thread.interrupt_main()
参考
> Thread module
> Termios module
> Msvcrt module
内容总结
以上是互联网集市为您收集整理的制作“任何键”可互换的Python计时器全部内容,希望文章能够帮你解决制作“任何键”可互换的Python计时器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。