локализация функции os.popen() в Python

Применяю функцию os.popen('dir') и выводятся символы в непонятной кодировке, как применить к данной функции кодировку utf-8


Ответы (3 шт):

Автор решения: Voko
for line in os.popen('dir'): 
      print(line.rstrip().encode('cp1251').decode('cp866'))
→ Ссылка
Автор решения: insolor

Консоль 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)
→ Ссылка
Автор решения: Fox Fox

В начале замечу, что у меня ситуация существенно сложнее. 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 для настолько простых задач и даром и не нужно. Кувалда для разбивания орешков.

→ Ссылка