Вопрос по subprocess, communicate, stdin, encode, python-3.x – ошибка подпроцесса python 3 в байтах

5

Очень хорошо, у меня есть небольшая проблема с выводом потока, я получаю Unicode или я думаю, и не позволяет мне преобразовать его в UTF-8, это код:

import subprocess,sys,time

string = b'dir'
process = subprocess.Popen('cmd.exe', shell=True,cwd="C:\\",stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=None)
process.stdin.write(string)
o,e=process.communicate()
process.wait()
process.stdin.close()
print (o.encode('utf-8'))

Я прыгаю следующую ошибку:

**Traceback (most recent call last):
  File "C:\Documents and Settings\francisco\Escritorio\k.py", line 12, in 
    print (o.encode(utf-8))
AttributeError: 'bytes' object has no attribute 'encode'**

если я печатаю, оставляя печать, и если вы позволите мне:

print(o)

но он печатает следующее:

**b'Microsoft Windows XP [Versi\xa2n 5.1.2600]\r\n(C) Copyright 1985-2001 Microsoft Corp.\r\n\r\nC:\\>\xa8M\xa0s? '**

и если я изменю эти две строки:

string = bytes('dir',encoding="utf-8") 
print (n[0].decode("latin"))

Я печатаю только часть вывода

что не получается? Я

мы решили так:

process.stdin.write("dir\n".encode())
o,e=process.communicate()
print (o.decode("utf-8"))

но я получаю ошибку:

Traceback (последний вызов был последним): File "C: \ Documents and Settings \ francisco \ Escritorio \ k.py "строка 6 в печатном виде (o.decode ("UTF-8")) UnicodeDecodeError: 'UTF-8' кодек можетt декодировать байт 0xa3 в позиции 103: неверный начальный байт

Я просто печатаю это так:

print (o.decode("latin"))

на латыни, я могу исправить эту ошибку и распечатать ее в utf-8?

Какn определены? unutbu

Ваш Ответ

1   ответ
10

oпервое возвращаемое значение изproc.communicate(), ужеbytes неstrТаким образом, он уже закодирован в некоторой кодировке (или вы можете думать об этом как о последовательности байтов).

В Python3bytes может бытьдекодированный вstr, а такжеstr может бытьзакодированный вbytes, ноbytes никогда не может быть закодирован, иstr никогда не может быть расшифрован. Вот почему Python3 жалуется "

AttributeError: 'bytes' object has no attribute 'encode'
В Python3 байты могут быть декодированы в str, Хорошо.Как? Ваш ответ объясняет почему, но нет решение или пример ... Olivier Pons
Решение было добавитьничего такого, Чтобы дать решение вопроса, этокакprint (o) вместо .print (o.decode("latin")) Olivier Pons
@OlivierPons Может быть попробовать?o.decode('utf-8') Mattijn

Похожие вопросы