локализация функции os.popen() в Python
Применяю функцию os.popen('dir') и выводятся символы в непонятной кодировке, как применить к данной функции кодировку utf-8
Ответы (3 шт):
for line in os.popen('dir'):
print(line.rstrip().encode('cp1251').decode('cp866'))
Консоль Windows по умолчанию работает в кодировке cp866, а os.popen вывод консоли декодирует кодировкой cp1251.
1 вариант решения - закодировать обратно кодировкой cp1251, потом декодировать кодировкой cp866:
import os
text = os.popen("dir").read()
print("До декодирования:")
print(text)
print("="*80)
print("После декодирования:")
print(text.encode('cp1251').decode('cp866'))
Результат:
До декодирования:
’®¬ ў гбва®©б⢥ C Ґ Ё¬ҐҐв ¬ҐвЄЁ.
‘ҐаЁ©л© ®¬Ґа ⮬ : 94D8-FA1E
‘®¤Ґа¦Ё¬®Ґ Ї ЇЄЁ C:\Users\user
02.12.2020 12:52 <DIR> .
02.12.2020 12:52 <DIR> ..
02.12.2020 12:52 <DIR> .vscode
02.12.2020 12:26 <DIR> Contacts
12.05.2021 09:31 <DIR> Desktop
02.12.2020 12:26 <DIR> Documents
26.02.2021 15:52 <DIR> Downloads
02.12.2020 12:26 <DIR> Favorites
02.12.2020 12:26 <DIR> Links
02.12.2020 12:26 <DIR> Music
10.03.2021 17:39 <DIR> Pictures
02.12.2020 12:26 <DIR> Saved Games
02.12.2020 12:26 <DIR> Searches
02.12.2020 12:26 <DIR> Videos
0 д ©«®ў 0 Ў ©в
14 Ї Ї®Є 13я888я589я824 Ў ©в бў®Ў®¤®
================================================================================
После декодирования:
Том в устройстве C не имеет метки.
Серийный номер тома: 94D8-FA1E
Содержимое папки C:\Users\user
02.12.2020 12:52 <DIR> .
02.12.2020 12:52 <DIR> ..
02.12.2020 12:52 <DIR> .vscode
02.12.2020 12:26 <DIR> Contacts
12.05.2021 09:31 <DIR> Desktop
02.12.2020 12:26 <DIR> Documents
26.02.2021 15:52 <DIR> Downloads
02.12.2020 12:26 <DIR> Favorites
02.12.2020 12:26 <DIR> Links
02.12.2020 12:26 <DIR> Music
10.03.2021 17:39 <DIR> Pictures
02.12.2020 12:26 <DIR> Saved Games
02.12.2020 12:26 <DIR> Searches
02.12.2020 12:26 <DIR> Videos
0 файлов 0 байт
14 папок 13 888 589 824 байт свободно
2 вариант: запускать через subprocess.run, потом брать содержимое stdout (набор байт) и декодировать с указанием нужной кодировки:
import subprocess
sub = subprocess.run(["cmd", "/c", "dir"], capture_output=True)
print(sub.stdout.decode('cp866'))
Результат:
Том в устройстве C не имеет метки.
Серийный номер тома: 94D8-FA1E
Содержимое папки C:\Users\user
02.12.2020 12:52 <DIR> .
02.12.2020 12:52 <DIR> ..
02.12.2020 12:52 <DIR> .vscode
02.12.2020 12:26 <DIR> Contacts
12.05.2021 09:31 <DIR> Desktop
02.12.2020 12:26 <DIR> Documents
26.02.2021 15:52 <DIR> Downloads
02.12.2020 12:26 <DIR> Favorites
02.12.2020 12:26 <DIR> Links
02.12.2020 12:26 <DIR> Music
10.03.2021 17:39 <DIR> Pictures
02.12.2020 12:26 <DIR> Saved Games
02.12.2020 12:26 <DIR> Searches
02.12.2020 12:26 <DIR> Videos
0 файлов 0 байт
14 папок 13 888 589 824 байт свободно
3 вариант: перед вызовом os.popen переводить консоль в кодировку cp1251 вызовом команды chcp 1251:
import os
os.system("chcp 1251")
text = os.popen("dir").read()
print(text)
В начале замечу, что у меня ситуация существенно сложнее. Windows не украинизирован, у меня все консольные приложения работают по-английски. И ничего, работает с кириллицей, само по себе. Вот содержимое моего скрипта directory.py, запускаемого непосредственно в Проводнике (Windows 11 24H2 Ukr):
import os as os
os.system(r"dir d:\documents\Довідники\Python")
os.system("pause > nul")
Вот результат:
Volume in drive D has no label.
Volume Serial Number is 8AAC-B8D1
Directory of d:\documents\Довідники\Python
07.07.2024 10:37 <DIR> .
06.07.2024 19:14 <DIR> ..
09.09.2023 13:20 794 256 A Byte of Python Russian (2020).pdf
16.09.2023 22:04 9 372 384 Beginning PyQt 2nd Edition - Joshua M Willman[2022].pdf
06.07.2024 19:14 <DIR> Cody Precord - wxPython 2.8 Application Development Cookbook - 2010
06.07.2024 19:14 <DIR> Cody Precord - WxPython Application Development Cookbook - 2015
09.04.2024 18:18 5 133 692 Driscoll M. - wxPython Recipes - 2018.pdf
19.02.2024 14:10 50 699 821 Pandas в действии 2023.pdf
07.07.2024 10:36 61 147 110 Python 3 и PyQt 6.pdf
03.12.2023 17:59 2 082 796 Python for Absolute Beginners - Oswald Campesato[2023].pdf
16.09.2023 22:05 6 312 545 Python for Scientists, 3rd Edition - John M. Stewart, Michael Mommert[2023].pdf
26.10.2023 10:24 12 111 206 Python How-To - Yong Cui[2023].pdf
09.09.2023 13:20 11 048 922 Python для начинающих (ru).pdf
27.03.2024 12:11 14 431 786 Python для сложных задач (Джейк Вандер Плас).pdf
09.09.2023 13:20 58 855 862 Python для чайников - 2019.pdf
09.09.2023 13:21 202 377 042 Python на практике - 2014.pdf
09.09.2023 13:20 41 632 970 Python на примерах - 2016.pdf
19.02.2024 14:08 6 863 298 Python с нуля 2024.pdf
14.09.2023 18:10 1 225 142 Python с нуля от новичка до собственных игр и программ 2023.pdf
12.02.2024 01:36 125 713 791 Python – это просто. Пошаговое руководство по программированию и анализу данных.pdf
06.06.2024 18:09 4 898 542 Python-интенсив. 50 быстрых упражнений 2024.pdf
09.09.2023 13:20 21 431 377 Python. К вершинам мастерства. 2022.pdf
09.09.2023 13:21 53 053 998 Python. Создание приложений.pdf
06.11.2023 09:53 13 525 867 Python_dlja_Excel(20.pdf
15.10.2023 04:09 10 026 772 The Well-Grounded Python Developer - Doug Farrell[2023].pdf
09.09.2023 13:21 21 142 540 Автоматизация рутинных задач с помощью Python [2016].pdf
01.06.2024 18:03 8 119 694 Большая книга проектов Python [2022] Свейгарт Э..pdf
29.01.2024 13:10 10 824 817 Глубокое обучение на Python. 2018.pdf
29.01.2024 13:10 10 789 958 Глубокое обучение с подкреплением на Python (2019).pdf
01.06.2024 18:03 10 446 040 Глубокое обучение с подкреплением теория и практика на языке Python 2022.pdf
01.06.2024 18:03 11 343 969 Глубокое_обучение_на_Python - 2023.pdf
09.09.2023 13:21 68 464 174 Знакомство с Python (2023).pdf
01.06.2024 18:03 68 464 174 Знакомство с Python - 2023.pdf
19.03.2024 10:08 3 294 144 Изучаем Python 2021.pdf
29.01.2024 13:10 6 494 257 Изучаем Python. 2020.pdf
01.06.2024 18:03 8 237 200 Изучаем Python. Программирование игр, визуализация данных, веб-приложения - 2017.pdf
09.09.2023 13:21 25 753 711 Изучаем программирование на Python.pdf
29.01.2024 13:10 5 672 295 Как устроен Python. 2019.pdf
17.01.2024 13:57 5 656 403 Косицин Д.Ю. Язык программирования Python 2019.pdf
01.06.2024 18:03 29 448 998 Математические алгоритмы для программистов. 3D-графика, машинное обучение и моделирование на Python 2023.pdf
02.07.2023 12:32 19 291 192 Начинаем программировать на Python (2022).pdf
01.06.2024 18:03 29 725 456 Объектно-ориентированный Python Надежные объектно-ориентированные приложения и библиотеки на языке Python 2024.pdf
01.06.2024 18:03 4 659 479 Однострочники_Python - 2022.pdf
16.01.2024 22:54 4 394 111 Озерова Г.П. Основы программирования на языке Python в примерах и задачах 2022.pdf
16.11.2023 00:11 745 368 Понятный Python. С наглядным кодом, для детей и начинающих.pdf
31.10.2023 19:56 20 366 112 Программирование на Python в примерах и задачах 2022.pdf
06.07.2024 19:14 <DIR> Прочитано
23.09.2023 11:25 12 759 191 Сверхбыстрый Python.pdf
22.10.2023 00:45 14 953 407 Уилсон К. - Программирование на Python для абсолютных новичков - 2023.pdf
21.11.2023 21:35 14 704 855 Чистый Python. Тонкости программирования для профи. 2024..pdf
45 File(s) 1 128 490 724 bytes
5 Dir(s) 40 263 094 272 bytes free
Какое резюме? Очень простое - это popen для настолько простых задач и даром и не нужно. Кувалда для разбивания орешков.