Почему subprocess выдает непонятные символы?

Если модуль subprocess возвращает непонятные символы, то проблема, скорее всего, связана с кодировкой данных, которые возвращаются из выполняемого процесса.

Python 3 по умолчанию использует кодировку UTF-8, но выполняемый процесс может использовать другую кодировку. В результате, когда subprocess получает данные, которые были закодированы в другой кодировке, то по умолчанию они будут декодированы с использованием кодировки UTF-8, что может привести к появлению непонятных символов.

Для решения этой проблемы можно явно указать кодировку, используемую выполняемым процессом. Например, если выполняемый процесс использует кодировку cp1251, то следует указать это явно в параметре encoding при создании объекта subprocess.Popen:

import subprocess

proc = subprocess.Popen(command, stdout=subprocess.PIPE, encoding='cp1251')
output, error = proc.communicate()

Здесь cp1251 - это кодировка, используемая выполняемым процессом. Укажите именно ту кодировку, которая соответствует выводу вашего процесса.

Если кодировка неизвестна или может изменяться, можно попробовать использовать стандартную кодировку системы:

import subprocess
import locale

encoding = locale.getpreferredencoding()

proc = subprocess.Popen(command, stdout=subprocess.PIPE, encoding=encoding)
output, error = proc.communicate()

Этот код использует стандартную кодировку системы, которая определяется функцией locale.getpreferredencoding().

Если указание кодировки не помогло, то возможно проблема в самом выводе выполняемого процесса. В таком случае, следует проверить, что процесс правильно кодирует данные. Возможно, он использует нестандартную кодировку или данные возвращаются в бинарном формате.

В целом, решение проблемы с непонятными символами в subprocess сводится к определению правильной кодировки и ее корректному использованию при получении результатов выполнения команды.