Найти тему

Работа с командной строкой в Python

Название статьи, возможно, не совсем точное. Но я что-то лучше не придумал. Речь пойдёт не о параметрах командной строки, которые передаются в программу, а об использовании команд оболочки (shell, командного интерпретатора) в сценариях на Python.

В разных операционных системах эти оболочки разные. Например, в Windows это cmd.exe (в старых версиях Windows это была command.com).

Командный интерпретатор имеет определённый набор команд. В Windows (хотя такая команда, если я не ошибаюсь, была ещё в DOS), например, команда DIR выводит список файлов и каталогов в текущей папке. А команда VOL отображает метку и серийный номер тома для диска. И в некоторых случаях проще в программе (сценарии) воспользоваться командами оболочки, а не конструкциями языка. В Python сделать это можно примерно так:

Комментарии подробные. Надеюсь, что всё понятно.

И хотя сегодня функция popen() считается устаревшей, не вижу никаких препятствий для её использования. С помощью этой функции мы запускаем команду, которая передаётся в функцию. Эта команда выполняется оболочкой, а функция popen() возвращает результат выполнения этой команды.

Например, в Windows команда VER возвращает версию операционной системы. Функция popen() возвращает объект, который ведёт себя как открытый файл. Соответственно, чтобы получить вывод команды, нам надо прочитать этот “файл”, что мы и делаем с помощью функции read(). Ну а дальше мы уже выводим всё это на экран.

Также вы наверняка обратили внимание, что итог выполнения команды VER выведен читаемо, а вот команда VOL вернула нам кракозябры. Это связано с тем, что в Windows командная строка имеет кодировку CP1251, а Python работает в Юникоде. Команда VER возвращает только английские буквы, поэтому строка выводится правильно. А вот в результате работы команды VOL есть и русские буквы. Поэтому из-за разных кодировок вместо них выводятся кракозябры.

К сожалению, я знаю Python не очень хорошо, и мне не удалось известными мне способами преобразовать кодировку CP1251 в UTF-8, чтобы вывести русские буквы в читабельном виде. Но я с этим ещё поразбираюсь и расскажу о найденном решении. Так что подписывайтесь на канал, чтобы ничего не пропустить.

С подпиской рекламы не будет

Подключите Дзен Про за 159 ₽ в месяц