|
6 / 6 / 2
Регистрация: 02.06.2009
Сообщений: 99
|
|||||||||||||||||||||
Кодировка stdout при работе с subprocess.Popen23.11.2016, 16:33. Показов 18862. Ответов 3
Метки нет (Все метки)
У меня Виндоус, а следовательно кодировка комманд, выполняемых в cmd определяется локалью же, да?! Ну короче это cp1251. А вот кодировка python-ской консоли UTF-8 (скорее всего, весьма вероятно, так оно и есть).
Так вот. Все бы ничего, но понадобилось мне выполнить из питонки команду:
Help me please ![]() Добавлено через 1 час 57 минут Покопал я значит сам Гуглы, по запускал разные варианты кода и выяснил, что мои бараны начинаются с IOBase. А уже где-то на уровне TextIOWrapper ударяются в Да, когда я конструктору Popen скармливаю параметр universal_newlines=True, то возвращает он мне по вызову stdout экземпляр TextIOWrapper (ну а иначе как мне с трубой работать). А знаете, что это значит? - Оказывается, это значит (ну как я понял), что интерпретатор берет строку байт и декодирует ее автоматом под локаль системную. А еще это значит, что если параметр universal_newlines сделать False, то вернет интерпретатор мне IOBufferedReader, над которым потом Wraper и наворачивается. Так, а почему бы собственно не попробовать тогда сделать это вручную??? Пробую, и опять мажу:
<_io.TextIOWrapper name=3 encoding='utf8'> Traceback (most recent call last): File "D:/ProgrammingNI/workingDir/DaCIdA/checks_2.py", line 9, in <module> s = my_out.readline() File "C:\Program Files\Anaconda3\lib\codecs.py", line 321, in decode (result, consumed) = self._buffer_decode(data, self.errors, final) UnicodeDecodeError: 'utf-8' codec can't decode byte 0x88 in position 2: invalid start byte Стоит мне поставить ручками ту же кодировку, что ставит интрепретатор автоматом, при использование параметра universal_newlines=True:
<_io.TextIOWrapper name=3 encoding='cp1251'> €¬п_б«г¦Ўл: AdobeARMservice ‚лў®¤Ё¬®Ґ_Ё¬п: Adobe Acrobat Update Service ’ЁЇ : 10 WIN32_OWN_PROCESS ‘®бв®п*ЁҐ : 4 RUNNING (STOPPABLE, NOT_PAUSABLE, IGNORES_SHUTDOWN) ... Ну плизики, NEED YOUR HELP ![]() Добавлено через 50 минут Парни, помогите, трахаюсь с кодировкой черт знает сколько. Вчера setlocale пробовал, и encode, и чот ваще не, потом вот, то что выше писал... Гугл внятного ответа не дает (ну либо я криворукий).
0
|
|||||||||||||||||||||
| 23.11.2016, 16:33 | |
|
Ответы с готовыми решениями:
3
Как под Windows прокинуть файловые дескрипторы через os.system или subprocess.Popen ? Как заставить subprocess.run(stdout=io.BytesIO() работать? |
|
757 / 306 / 190
Регистрация: 20.05.2016
Сообщений: 593
|
|||||||||||
| 23.11.2016, 16:52 | |||||||||||
|
cmd выдаёт текст в кодировке - cp866, посему
1
|
|||||||||||
|
6 / 6 / 2
Регистрация: 02.06.2009
Сообщений: 99
|
||||||
| 24.11.2016, 12:19 [ТС] | ||||||
|
Спасибо вам большое. Я совсем забыл про такую вещь, как cp866. Динозавр, перекочевавший к нас со времен псевдографики...
Раз уж написал на форум, то почему бы не задать еще вопрос... Я вот пытался список служб всех получить с их состояниями и прочей инфой о них. Решил, что запущу процесс CLI из Python-а, но были, в принципе, и другие варианты, например, попробовать заюзать какую-нибудь pywin32 (в ней пакет service utils)... В итоге имею, то, что имею. Список всех служб я получил, все ок. Но может есть и другие варианты.
0
|
||||||
|
6 / 6 / 2
Регистрация: 02.06.2009
Сообщений: 99
|
||||||
| 24.11.2016, 12:33 [ТС] | ||||||
|
И ещё есть вот такая ошибка на компе моего знакомого. Хотя у меня все работает.
Вот код:
0
|
||||||
| 24.11.2016, 12:33 | |
|
Помогаю со студенческими работами здесь
4
Неправильная кодировка при работе с MSSQL Lazarus и кодировка при работе с WinAPI Кодировка в консоли при работе с jdbc. Windows 10
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2.
Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
|
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
|
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
|
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2.
Данный документ берёт данные из другого нетипового документа. . .
|
|
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача:
1. Реализовать контроль заполнения реквизита. . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|