Я бег процесса, используя подпроцесс:чтение подпроцесса выходных символов многобайтовых один на один
p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
То, что я хочу сделать, это прочитать выходные символы один за другой в цикле:
while something:
char = p.stdout.read(1)
В python3 subprocess.Popen().stdout.read()
bytes()
не str()
. Я хочу использовать его как str, так что мне нужно:
char = char.decode("utf-8")
и он отлично работает с символами ascii.
Но с символами non-ascii (например, греческими буквами) я получаю UnicodeDecodeError. Вот почему греческие символы состоят из более чем одного байта. Вот проблема:
>>> b'\xce\xb5'.decode('utf-8')
'ε'
>>> b'\xce'.decode('utf-8') # b'\xce' is what subprocess...read(1) returns - one byte
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xce in position 0: unexpected end of data
>>>
Как я могу справиться с этим? Вывод subprocess.Popen().stdout.read()
(как строка) может быть чем-то вроде «lorem ipsum εφδφδσloremipsum».
Я хочу прочитать один символ времени, но этот символ может состоять из нескольких байтов.