首页 > 解决方案 > 在 python3.x 中使用什么从控制台获取非 ascii 值

问题描述

我正在尝试形成一个管道,用 C 编写的程序在其中给出连续输出write()。该数据流应被 python 脚本接受并进一步处理。
通过使用input()(python 3.x),我能够在 C 编写的源程序使用 发出数据时捕获数据printf(),无论如何为了加快速度,我改为write()控制台。

这就是问题开始的地方:从现在开始,我无法使用 python 脚本获取数据,因为input()不想接受非 ascii 值。我知道,write()给出二进制数据而不是字符串。

  1. python有没有其他方法可以接受来自外部的数据,最好是来自控制台,其中数据包含非ascii值(最好是二进制输入)?

我试图修改 C 程序以形成一个 ascii 字符串。字符数组加上终止零(也:以零结尾的字符串,带有 CR 和 LF+CR),无论如何,python 似乎在终止零之后进一步阅读,然后给出UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 130: invalid continuation byte错误,其中发送的字符串长度为 4 个字符(C - 数组:[ 99, 0, 10, 13] 相当于 'c' 以零结尾和 LF 和 CR)。

所以 - 尝试实施其他解决方案 - 问题 2. 是否有可能限制input()python 从控制台获取未知数据部分并引发错误之前的长度?

标签: cpython-3.xinput

解决方案


要读取二进制文件,您可能应该.read()在文件对象上使用该方法。而您要使用的对象可能是sys.stdin.buffer.

检查模块的文档iosys.stdin.


推荐阅读