Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python3在访问字符设备时提供UnicodeDecodeError_Python_Python 3.x - Fatal编程技术网

Python3在访问字符设备时提供UnicodeDecodeError

Python3在访问字符设备时提供UnicodeDecodeError,python,python-3.x,Python,Python 3.x,有一天,我在网上发现了一个页面,其中包括解释Linux上游戏板的输入。代码如下: import sys pipe = open('/dev/input/js0','r') while 1: for character in pipe.read(1): sys.stdout.write(repr(character)) sys.stdout.flush() 该程序用于打开连接到USB端口的Logitech双动作游戏板的角色设备文件。在Python 2.7下

有一天,我在网上发现了一个页面,其中包括解释Linux上游戏板的输入。代码如下:

import sys
pipe = open('/dev/input/js0','r')
while 1:
    for character in pipe.read(1):
        sys.stdout.write(repr(character))
        sys.stdout.flush()
该程序用于打开连接到USB端口的Logitech双动作游戏板的角色设备文件。在Python 2.7下运行程序时,我得到了预期的输出:

'\x0c''\xe0''E''\x00''\x01''\x00''\x01''\x01''D''\xe0''E''\x00''\x00''\x00'
'\x01''\x01''\xbc''^''F''\x00''\x01''\x00''\x01''\x05''<''_''F''\x00''\x00'
'\x00''\x01''\x05'
'\x0c'\xe0''E'\x00'\x01'\x00'\x01'\x01''D'\xe0''E'\x00'\x00'

“\x01”“\x01”“\xbc”“^”F”“\x00”“\x01”“\x00”“\x01”“\x05”“您不会从游戏板接收字符,只能接收字节。因此,您需要读取字节而不是字符。并非所有字节序列都将转换为有效字符,这就是您收到错误的原因


有关如何以二进制模式打开和读取的详细信息,请参阅位于的Python文档中的
open
方法。

您不会从游戏板接收字符,只接收字节。因此,您需要读取字节而不是字符。并非所有字节序列都将转换为有效字符,这就是您收到错误的原因

pipe = open('/dev/input/js0','rb')

有关如何以二进制模式打开和读取的详细信息,请参阅位于的Python文档中的
open
方法。

如果需要原始字节,则需要以二进制模式打开它

pipe = open('/dev/input/js0','rb')

如果需要原始字节,则需要以二进制模式打开它

pipe = open('/dev/input/js0','rb')

工作得很有魅力。唯一的区别是我得到了一个数字串而不是数据块,这可能更容易处理。非常感谢你,工作很有魅力。唯一的区别是我得到了一个数字串而不是数据块,这可能更容易处理。非常感谢。我确实检查了Python文档中的open(),但我尝试了“r+b”而不是“rb”。现在回想起来,我看到了这样的情况:“因此,当打开一个二进制文件时,应该在mode值后面附加'b',以二进制模式打开文件,这将提高可移植性。”我确实检查了Python文档中的open(),但我尝试了'r+b'而不是'rb'。现在回想起来,我看到了这样的情况:“因此,当打开一个二进制文件时,您应该在mode值后面附加'b',以二进制模式打开文件,这将提高可移植性。”