首页 > 解决方案 > 暂停python脚本等待按键

问题描述

我有一个相对简单的脚本和一个可能很简单的问题。在互联网上,我收集了一些关于如何在我的 python 代码中使用直接按键作为输入的解决方案。我更喜欢这些而不是 raw_input,因为它感觉更快。就像我有一个包含 3 个选项的菜单,每个选项都有 3 个选项,我可以轻松地按键盘上的 3 然后按 2 来到达我需要去的地方。

代码是:

import keyboard
import time

def mainmenu():
    while(True):
        print ('1. Scan')
        print ('2. Ping')
        print ('3. Exit')

        if keyboard.is_pressed('1'):
            print ('Option 1\n')
        elif keyboard.is_pressed('2'):
            print ('Option 2\n')
        elif keyboard.is_pressed('3'):
            print ('Exiting\n')
            exit(0)
        else:
            print ('none of the specified options were chosen')
            time.sleep(0.3)
            exit(0)
mainmenu()

我只想要一些可以暂停代码的东西,我可以按下一个键。
由于某种原因我不能使用time.sleep()。它也不喜欢在它之前或之后的瞬间输入。
如果我能得到一个函数来做这件事,那就太棒了,这样我就可以在其他地方输入它。

如果最后没有 else 语句,while 循环就会继续。
如果我在 while 循环中没有它,脚本会在 1 秒内打印选项,然后默认为 else,因为我在 1 秒内没有按下任何键。
我知道它可以工作,因为如果我取出 else 语句,并且在它一遍又一遍地向选项发送垃圾邮件时按 3,IDLE 会询问我是否想在脚本运行时终止它。

标签: python

解决方案


使用keyboard.read_key(),因为它将阻止其余代码的执行,直到发生键盘事件,然后返回该事件的名称,或者如果缺少,则返回其扫描代码。

import keyboard
import time

def mainmenu():
    print ('1. Scan')
    print ('2. Ping')
    print ('3. Exit')

    while(True):
        a = keyboard.read_key()

        if a == '1' or a == '2':
            print("Option {} was pressed\n".format(a))
        elif a == '3':
            print("Exiting\n")
            exit(0)
        else:
            print("None\n")
            exit(0)

        time.sleep(0.3)

mainmenu()

推荐阅读