如何使用click.getchar()识别“输入键”(python)

时间:2019-08-08 18:59:39

标签: python

我正在制作Python脚本,想让用户使用箭头键在屏幕上导航。

我从@yatsa找到了这个答案,这确实对Arrows有用: https://stackoverflow.com/a/46449300/11903801

#!/usr/bin/python

import click

printable = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

while True:
    click.echo('Continue? [yn] ', nl=False)
    c = click.getchar()
    click.echo()
    if c == 'y':
        click.echo('We will go on')
    elif c == 'n':
        click.echo('Abort!')
        break
    elif c == '\x1b[D':
        click.echo('Left arrow <-')
    elif c == '\x1b[C':
        click.echo('Right arrow ->')
    else:
        click.echo('Invalid input :(')
        click.echo('You pressed: "' + ''.join([ '\\'+hex(ord(i))[1:] if i not in printable else i for i in c ]) +'"' )

本示例应该确定是按下了左键还是右键,并且还打印了按下的任何其他键盘键的“ py-string表示形式”。

说,我必须更改代码以使其对我有用...
当我在上面的代码中运行时,没有识别出左右箭头。
相反,它显示给我:

You pressed "\xe0K"(用于左箭头)

You pressed "\xe0M"(对于右箭头)

我做了什么?
用打印在我上面的控制台替换掉elifs中的值,然后成功!

好的,很好,所以接下来我想确定“ Enter Key”,因此我运行了脚本,按Enter,然后打印出来:You pressed "\xd"

那我做了什么?
控制台使用此字符串创建了一个新的条件。

但是...

    elif c == '\xd':
             ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-2: truncated \xXX escape

Process finished with exit code 1

所以,我不知道出了什么问题,我尝试在网上搜索,但是没有找到任何可以解释给我的东西。

我正在使用Windows 7。

1 个答案:

答案 0 :(得分:-1)

我建议使用(或参考)keyboard库。这样做的好处是您将能够遵守Windows和Linux(OSX在该库中似乎是试验性的)

要具体回答您的问题,似乎您应该使用0x0d作为Enter

编辑:将链接添加到Enter键