python: 在连续循环中使用键盘输入?
这个操作系统是一个红帽克隆的Linux版本,我在用python-2.x。
代码的大致结构是:
# stuff is initialized
while True:
# read stuff from remote devices
# process data
# maybe do stuff, or maybe just watch
os.system("clear")
# display status of remote devices
time.sleep(1)
我想让用户通过按不同的键来控制程序。比如说,“按S键可以优雅地关闭远程设备,按K键可以强制关闭,按R键可以重启”。这些操作都需要在一个大循环里进行,也就是我伪代码中的“可能做事情,或者只是观察”那部分。如果没有按键,程序就应该一直循环下去。
我不太确定在一个while True: time.sleep(1)的循环中,怎么读取键盘输入。
2 个回答
0
下面的代码对我来说运行得很好。
while True:
choice = raw_input("> ")
choice = choice.lower() #Convert input to "lowercase"
if choice == 'exit':
print("Good bye.")
break
if choice == 'option1':
print("Option 1 selected")
if choice == 'option2':
print("Option 2 selected")
1
最简单的方法可能就是使用 curses 这个库。它可以让你清屏,而不需要依赖一个可能存在也可能不存在的外部程序(有趣的是,我的Ubuntu系统上,/usr/bin/clear
是由 ncurses-bin
这个包提供的)。使用这个库,你可以很方便地 监听按键,而不需要按Enter键,而且在屏幕上放置文本到特定位置也变得很简单。
不过,使用curses的缺点是,使用它的程序在管道中很难使用。但如果你已经在程序内部调用了 clear(1)
,那么管道其实就不太适用了。