python: 在连续循环中使用键盘输入?

6 投票
2 回答
11016 浏览
提问于 2025-04-16 19:13

这个操作系统是一个红帽克隆的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),那么管道其实就不太适用了。

撰写回答