msvcrt.getch()返回b'a'而不是'a'?

时间:2015-06-14 02:01:37

标签: python-3.x msvcrt getch

我有一个类的以下代码:

Activity.RESULT_CANCELED

然后我有另一个导入_Getch的类。在另一个类中,我尝试使用_Getch提供的read_key来处理条件:

class _Getch:
    def __init__(self):
        self.impl = _GetchWindows()
    def read_key(self): 
        return self.impl()

class _GetchWindows:
    def __init__(self):
        import msvcrt
    def __call__(self):
        import msvcrt
        return msvcrt.getch()

当我尝试输入'a'时,我期待键为'a',但它返回b'a'而不是。因此,密钥不会满足任何条件,并将永远继续。为什么它会回归b'a'?我该怎么做才能让它返回'a'?

2 个答案:

答案 0 :(得分:2)

根据documentationmsvcrt.getch()会返回字节字符串

因此,您需要在其上使用bytes.decode()方法将其转换为unicode字符串。 提示:如果您执行此操作,则应查找环境编码并使用该环境而不是默认utf-8。或者您可以使用errors='replace'

或者您可以将代码更改为与b'a'进行比较。

N.B。:您的代码中存在语法错误;您应该在==语句中使用if(比较运算符)而不是=(分配)。

答案 1 :(得分:0)

一种简单的方法是将解码调用链接在getch()之后:

import msvcrt

key = msvcrt.getch().decode('ASCII')

# 'key' now contains the ASCII representation of the input suited for easy comparison
if key == 'a':
    # do a thing
elif key == 's':
    # do another thing

请参见reference answer