Печать вывода Unicode из подпроцесса в терминал в Windows - PullRequest
0 голосов
/ 03 июля 2018

Я пытаюсь запустить команду, которая выдает вывод Unicode, и распечатать этот вывод в оболочку.

Мой код похож на следующий (CP850, потому что это кодовая страница, используемая моим терминалом Windows, как возвращается chcp):

command = 'echo Тестирование всегда необходимо!'
p = Popen(command, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True)
out, err = p.communicate()
out = out.decode('CP850')
err = err.decode('CP850')
print(out)

Я получаю: ?????????? ?????? ??????????!

Как я могу заставить пропустить правильный текст?

1 Ответ

0 голосов
/ 03 июля 2018

Почему вы пытаетесь декодировать этот контент, как если бы он был в CP850? Нет причин делать это.

$ python
Python 2.7.10 (default, Oct  6 2017, 22:29:07)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from subprocess import Popen, PIPE
>>> command = "echo 'Тестирование всегда необходимо!'"
>>> p = Popen(command, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True)
>>> out, err = p.communicate()
>>> print out
Тестирование всегда необходимо!

Аналогично, в Python 3:

$ python3.6
Python 3.6.5 (default, Mar 29 2018, 15:37:32)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from subprocess import Popen, PIPE
>>> command = "echo 'Тестирование всегда необходимо!'"
>>> p = Popen(command, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE, universal_newlines=True)
>>> out, err = p.communicate()
>>> print(out)
Тестирование всегда необходимо!
...