暂停python脚本等待按键

时间:2018-06-15 08:19:15

标签: 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会询问我是否想要在运行时杀死脚本。

2 个答案:

答案 0 :(得分:1)

您可以使用input()来产生相同的效果。

import time

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

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

答案 1 :(得分:1)

使用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()