【问题标题】:Pause python script wait for key press暂停python脚本等待按键
【发布时间】:2018-06-15 08:19:15
【问题描述】:

我有一个相对简单的脚本和一个可能很简单的问题。 在互联网上,我收集了一些关于如何在我的 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


【解决方案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()

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 正如 OP 提到的他不想使用raw_input,就像input 一样,需要加按return(两次击键而不是一次击键)。
    • 是的,Negi 你读过我的问题吗?我还提交了对您的代码的编辑,因为它要求 if/elif 语句看起来更像 if x==1: 而不是 if x == '1':
    猜你喜欢
    • 2013-09-30
    • 1970-01-01
    • 2012-11-10
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    相关资源
    最近更新 更多