ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 03.12.2023
Просмотров: 367
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
38
Глава 1.Обработка ошибок и обращение за помощью
Сторонние модули, использованные в программе, и их версии (например,
Django 2.1.1).
Чтобы узнать номера версий установленных сторонних модулей, выполните команду pip list
. Номер версии принято включать в атрибут
__version__
, как в следующем примере:
>>> import django
>>> django.__version__
'2.1.1'
Скорее всего, эта информация не потребуется. Но чтобы избежать лишних вопро- сов, все равно включите эту информацию в исходный пост.
Примеры вопросов
Ниже приведен пример правильно заданного вопроса, который отвечает всем ре- комендациям из предыдущего раздела:
«
Selenium Webdriver: как мне найти ВСЕ атрибуты элемента?
В модуле Python Selenium, если у меня есть объект
WebElement
, я могу получить значение любого из его атрибутов вызовом get_attribute()
:
foo = elem.get_attribute('href')
Если атрибут с именем 'href'
не существует, возвращается
None
Вопрос: как получить список всех атрибутов, имеющихся у элемента? Я не на- шел ничего похожего на метод get_attributes()
или get_attribute_names()
Я использую версию 2.44.0 модуля Selenium для Python».
Этот вопрос был взят со страницы https://stackoverflow.com/q/27307131/1893164/.
Заголовок обобщает вопрос в одном предложении. Проблема сформулирована в виде вопроса и завершается вопросительным знаком. Если в будущем кто-нибудь прочитает этот заголовок в результатах поиска, он немедленно поймет, имеет это отношение к его проблеме или нет. Код выделен моноширинным программным шрифтом, а текст разбит на абзацы. С первого взгляда понятно, где в этом со- общении находится вопрос: перед ним даже стоит уточнение «Вопрос:». В тексте предполагается, что метод get_attributes()
или get_attribute_names()
мог бы присутствовать, но его нет. Также сообщается, что была предпринята попытка найти решение, и приводится предположение о том, как бы мог выглядеть пра- вильный ответ на вопрос. Кроме того, указана версия модуля Selenium на случай,
Итоги
39
если она вдруг понадобится. Лучше привести слишком много информации, чем слишком мало.
Итоги
Независимый поиск ответов на вопросы из области программирования — самый важный навык, которым должен владеть каждый программист. Интернет был по- строен программистами, и в нем имеется множество ресурсов с ответами, которые вам нужны.
Но сначала необходимо разобрать (часто невразумительные) сообщения об ошиб- ках, выдаваемые Python. Если вы не понимаете текст сообщения об ошибке — ничего страшного. Вы все равно можете передать этот текст поисковой системе, чтобы найти описание ошибки на нормальном языке и его наиболее вероятную причину.
Трассировка ошибки сообщит, где в вашей программе возникла проблема.
Статический анализатор способен в реальном времени находить опечатки и потен- циальные ошибки в процессе написания кода. Статические анализаторы абсолютно необходимы для современной разработки ПО. Если в вашем текстовом редакторе нет статического анализатора или возможности подключить его в виде плагина, подумайте о переходе на другой редактор, в котором такая возможность имеется.
Если вам не удается найти решение проблемы в интернете, попробуйте опублико- вать вопрос на форуме или задайте вопрос эксперту по электронной почте. Чтобы повысить эффективность запроса, в этой главе я рассказал, как оформить «хоро- ший» вопрос по программированию. Задавайте конкретный, хорошо сформули- рованный вопрос, приведите полный исходный код и подробности сообщения об ошибке, объясните, что вы уже пытались сделать, и назовите используемую версию операционной системы и версию Python. Ответы не только решат вашу проблему, но будут полезны и тем, кто столкнется с той же проблемой в будущем.
Не падайте духом, даже если вам приходится постоянно искать ответы и обра- щаться за помощью. Программирование — необъятная область, и никто не сможет держать в голове все нюансы. Даже опытные разработчики ежедневно обращаются к интернету за документацией и решениями. Приложите усилия, чтобы научиться искать решения — это поможет вам стать эффективным программистом Python.
2
Подготовка среды
и командная строка
Подготовкой среды называется процесс настройки вашего компьютера для программирования. Он включает установку всех необходимых инструментов, настройку их конфигура- ции и решение всех проблем, возникающих в процессе под- готовки. Единственно верного процесса не существует, потому что все используют разные компьютеры с разными операционными системами, версиями операционных систем и версиями интерпретатора Python.
Тем не менее в этой главе описаны базовые концепции, которые помогут вам ад- министрировать ваш компьютер, используя командную строку, переменные среды и файловую систему.
Изучение этих концепций и средств может показаться досадной помехой. Вы хотите писать программы, а не возиться с параметрами конфигурации или разбираться в невразумительных консольных командах. Но эти навыки сэкономят ваше время в долгосрочной перспективе. Если вы будете игнорировать сообщения об ошибках или наугад изменять конфигурацию, чтобы ваша система делала то, что нужно, вам удастся замаскировать проблему, но не исправить ее. Но если вы не пожалеете времени и как следует научитесь решать такие задачи, вы сможете предотвратить возникновение проблем в будущем.
Файловая система
Файловая система используется операционной системой для хранения и чтения данных. Файл обладает двумя ключевыми свойствами: именем и путем. Путь за- дает местоположение файла на компьютере. Например, файл на моем ноутбуке с Windows 10 хранится под именем project.docx в
C:\Users\Al\Documents
(это и есть путь).
Файловая система
41
Часть имени файла после последней точки называется расширением файла и сообщает его тип. Расширение в имени файла project.docx показывает, что это документ Word, а
Users
,
Al и
Documents обозначают названия папок (также называемых каталогами).
Папки могут содержать файлы и другие папки. Например, файл project.docx хранится в папке
Documents
, которая находится в папке
Al
, которая в свою очередь помещена в папку
Users
На рис. 2.1 изображена структура папок.
Рис. 2.1. Файл в иерархии папок
Часть пути
C:\
определяет корневую папку, которая содержит все остальные папки.
В системе Windows корневой папке присваивается имя
C:\
. Также корневую папку называют диском C:. В macOS и Linux корневая папка обозначается
/
. В этой книге я использую корневую папку для Windows —
C:\
. Если вы будете вводить примеры в интерактивном сеансе macOS или Linux, укажите
/
Дополнительные тома — такие, как дисководы DVD или флеш-диски USB, по- разному представлены в разных операционных системах. В Windows — это новые корневые диски, обозначаемые другими буквами, например
D:\
или
E:\
. В macOS — это новые папки внутри папки
/Volumes
. В Linux — новые папки внутри папки
/mnt
(сокращение от mount). Учтите, что в Windows и macOS регистр символов в именах папок и файлов игнорируется, но в Linux он значим.
Пути в Python
В Windows для разделения имен папок и файлов используется символ
\
(обратная косая черта), а в macOS и Linux разделителем является символ
/
(косая черта).
Чтобы не держать в голове оба варианта для обеспечения межплатформенной со- вместимости сценариев Python, можно использовать модуль pathlib и оператор
/
42
Глава 2.Подготовка среды и командная строка
Для импортирования pathlib обычно используется команда from pathlib import
Path
. Так как из всех классов pathlib чаще всего применяется класс
Path
, эта форма позволяет использовать имя
Path вместо pathlib.Path
. Вы можете передать
Path()
строку с именем папки или файла, чтобы создать объект
Path
, представляющий эту папку или файл. Если крайний левый объект в выражении является объектом
Path
, оператор
/
может использоваться для сцепления объектов
Path или строк. Введите следующие команды в интерактивной оболочке:
>>> from pathlib import Path
>>>
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Path('spam') / 'bacon' / 'eggs'
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon/eggs')
WindowsPath('spam/bacon/eggs')
>>> Path('spam') / Path('bacon', 'eggs')
WindowsPath('spam/bacon/eggs')
Так как этот код выполняется на компьютере с Windows,
Path()
возвращает объекты
WindowsPath
. В macOS и Linux возвращается объект
PosixPath
. (POSIX — набор стандартов для Unix-подобных операционных систем, эта тема выходит за рамки книги.) Для наших целей различать эти два типа необязательно.
Объект
Path можно передать любой функции стандартной библиотеки Python, ожи- дающей получить имя файла. Например, вызов функции open(Path('C:\\')
/
'Users'
/
'Al'
/
'Desktop'
/
'spam.py')
эквивалентен open(r'C:\Users\Al\Desktop\spam.py')
Домашний каталог
Многие пользователи создают папку под названием домашняя папка (home folder) или домашний каталог (home directory), предназначенную для хранения персо- нальных файлов на компьютере. Чтобы получить объект
Path для домашней папки, вызовите
Path.home()
:
>>> Path.home()
WindowsPath('C:/Users/Al')
Домашние каталоги помещаются в определенное место, которое зависит от типа операционной системы.
В Windows домашние каталоги хранятся в каталоге
C:\Users
На Mac домашние каталоги хранятся в каталоге
/Users
В Linux домашние каталоги часто хранятся в каталоге
/home
Ваши сценарии почти наверняка будут иметь разрешение для чтения и записи в файлы в вашем домашнем каталоге, поэтому он идеально подходит для хранения файлов для ваших программ Python.
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "", line 1, in
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM .
06/12/2019 05:18 PM ..
12/04/2018 07:16 PM .android
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
Файловая система
43
Текущий рабочий каталог
У каждой программы, выполняемой на компьютере, имеется текущий рабочий
каталог (CWD, Current Working Directory). Считается, что все имена файлов или пути, имена которых не начинаются с названия корневой папки, хранятся в текущем рабочем каталоге. Хотя термин «папка» считается более современным, стандартным названием является «текущий рабочий каталог» (или просто «рабочий каталог»), а не «текущая рабочая папка».
Текущий рабочий каталог можно получить в виде объекта
Path при помощи функ- ции
Path.cwd()
и изменить его функцией os.chdir()
. Введите следующий фрагмент в интерактивной оболочке:
>>> from pathlib import Path
>>> import os
>>> Path.cwd()
❶
WindowsPath('C:/Users/Al/AppData/Local/Programs/Python/Python38')
>>> os.chdir('C:\\Windows\\System32')
❷
>>> Path.cwd()
WindowsPath('C:/Windows/System32')
Здесь в качестве текущего рабочего каталога выбран
C:\Users\Al\AppData\Local\Pro- grams\Python\Python38
❶
, так что имя файла project.docx будет относиться к файлу
C:\
Users\Al\AppData\Local\Programs\Python\Python38\project.docx
. А если сменить текущий рабочий каталог на
C:\Windows\System32
❷
, имя файла project.docx будет относиться к
C:\Windows\System32\project.docx
При попытке выбрать несуществующий каталог Python выдает сообщение об ошибке:
>>> os.chdir('C:/ThisFolderDoesNotExist')
Traceback (most recent call last):
File "
FileNotFoundError: [WinError 2] The system cannot find the file specified:
'C:/ThisFolderDoesNotExist'
Ранее для получения текущего рабочего каталога в виде строки использовалась функция os.getcwd()
из модуля os
Абсолютные и относительные пути
Существуют два способа определения путей к файлам.
Абсолютный путь — всегда начинается от корневой папки.
Относительный путь — задается относительно текущего рабочего каталога программы.
44
Глава 2.Подготовка среды и командная строка
Также существуют папки с названием
(точка) и
(точка, точка). Это не реально существующие папки, а специальные имена, которые могут использоваться в путях.
Точка (
) вместо имени папки является сокращенным обозначением для текущей папки. Две точки (
) обозначают родительскую папку.
На рис. 2.2 представлены примеры папок и файлов. Когда текущим рабочим ката- логом назначается
C:\bacon
, относительные пути других файлов и папок задаются так, как показано на иллюстрации.
Префикс
.\
в начале относительного пути не обязателен. Например,
.\spam.txt и spam.
txt обозначают один и тот же файл.
Абсолютные пути
Текущий рабочий каталог
Относительные пути
Рис. 2.2. Относительные пути для папок и файлов в рабочем каталоге C:\bacon
Программы и процессы
Программой называется любое приложение, которое можно запустить на ком- пьютере: веб-браузер, электронная таблица, текстовый процессор и т. д. Процесс представляет собой выполняемый экземпляр программы. Например, на рис. 2.3 показаны пять работающих процессов одной программы-калькулятора.
Процессы существуют независимо друг от друга, даже если они выполняют одну и ту же программу. Например, если вы запустите сразу несколько экземпляров про- граммы Python, каждый процесс имеет собственный набор значений переменных.
Каждый процесс (даже если они относятся к одной программе) имеет свой текущий рабочий каталог и значения переменных среды. Как правило, в каждой командной строке выполняется только один процесс (хотя ничто не мешает вам открыть не- сколько окон командной строки одновременно).
Командная строка
45
Рис. 2.3. Одна программа-калькулятор запущена в нескольких экземплярах, каждый экземпляр является отдельным процессом
Каждая операционная система использует собственный способ просмотра списка выполняемых процессов. В Windows
Диспетчер задач вызывается комбинацией кла- виш
Ctrl-Shift-Esc
. В macOS следует выполнить команду
Applications
Utilities
Activity
Monitor
. В Ubuntu Linux комбинация клавиш
Ctrl-Alt-Del открывает приложение, так- же называемое
Диспетчером задач
(Task Manager). В
Диспетчере задач также можно принудительно завершить выполняемый процесс, если он перестает реагировать на действия пользователя.
Командная строка
Командной строкой называется программа текстового режима, в которой можно вводить команды для взаимодействия с операционной системой и запуска про- грамм. Также командную строку иногда называют интерфейсом командной строки
(CLI, Command Line Interface), терминалом, оболочкой или консолью. Командная строка — альтернатива для графического интерфейса пользователя (GUI, Graphic
User Interface), который позволяет вам взаимодействовать с компьютером, не ограничиваясь текстовым интерфейсом. Графический интерфейс представляет информацию визуально, в нем проще выполнять различные операции, чем в режи- ме командной строки. Многие пользователи считают командную строку слишком сложным инструментом и никогда не обращаются к ней. Эти опасения отчасти
46
Глава 2.Подготовка среды и командная строка обусловлены нехваткой информации об ее использовании. Если кнопка в графи- ческом интерфейсе хотя бы обозначает место, где следует щелкнуть, то пустое окно терминала не дает подсказки, что именно нужно ввести.
Тем не менее существуют веские причины, для того чтобы освоить командную строку на хорошем уровне. Во-первых, для подготовки среды часто приходится использовать именно ее, а не графические окна. Во-вторых, вводить команды с клавиатуры намного быстрее, чем щелкать мышью в графических окнах. Тек- стовые команды также более понятны по сравнению с перетаскиванием значка на другой значок. Из-за этого они лучше подходят для автоматизации: вы можете объединить несколько конкретных команд в сценарии для выполнения сложных операций.
Программа командной строки существует в исполняемом файле на вашем ком- пьютере. В этом контексте ее часто называют программой командной оболочки. При запуске программы командной оболочки на экране появляется терминальное окно.
В системе Windows командной оболочкой является файл
C:\Windows\Sys- tem32\cmd.exe
В macOS — файл
/bin/bash
В Ubuntu Linux — файл
/bin/bash
За прошедшие годы программисты написали много разных командных оболочек для операционной системы Unix, включая Bourne Shell (исполняемый файл с име- нем sh
) и позднее — Bourne-Again Shell (исполняемый файл с именем
Bash
). Linux использует Bash по умолчанию, тогда как в macOS применяется похожая оболочка
Zsh (или Z Shell) в Catalina и более поздних версиях. Из-за другой истории раз- работки в Windows используется оболочка с именем
Командная строка
. Все эти про- граммы делают одно и то же: открывают окно терминала с текстовым интерфейсом, в котором пользователь вводит команды и запускает программы.
В этом разделе описаны некоторые общие концепции и основные команды команд- ной строки. Вы, конечно, можете изучить массу разнообразных команд и стать на- стоящим профи, но на самом деле достаточно знать всего около дюжины команд.
Точные их имена могут слегка видоизменяться в зависимости от операционной системы, но базовые действия остаются одними и теми же.
Открытие окна терминала
Чтобы открыть окно терминала, выполните следующие действия.
В Windows щелкните на кнопке
Пуск
, введите
Командная строка и нажмите
Enter
Командная строка
47
В macOS щелкните на значке Spotlight в правом верхнем углу, введите
Ter- minal и нажмите
Enter
В Ubuntu Linux нажмите клавишу WIN, чтобы открыть Dash, введите
Ter- minal и нажмите
Enter
. Также можно воспользоваться комбинацией клавиш
Ctrl-Alt-T
В терминале появляется приглашение для ввода команд (по аналогии с интерак- тивной оболочкой, в которой выводится приглашение
>>>
). В Windows в качестве приглашения используется полный путь к текущей папке:
C:\Users\Al>здесь вводятся ваши команды
В macOS приглашение состоит из имени компьютера, двоеточия и текущего ра- бочего каталога, обозначенного тильдой (
); далее идет имя пользователя и знак доллара (
$
):
Als-MacBook-Pro: al$ здесь вводятся ваши команды
В Ubuntu Linux приглашение похоже на приглашение macOS, не считая того что оно начинается с имени пользователя и амперсанда (
@
):
al@al-VirtualBox:$ здесь вводятся ваши команды
Во многих книгах и учебниках приглашение командной строки отображается в виде
$
для упрощения примеров. Внешний вид приглашения можно изменять, но эта тема выходит за рамки книги.
Запуск программ из командной строки
Чтобы запустить программу или команду, введите ее имя в командной стро- ке. Давайте запустим программу-калькулятор, входящую в состав стандартных программ операционной системы. Введите в командной строке следующую команду.
В системе Windows введите calc.exe
В macOS введите open -a Calculator
. (Строго говоря, эта команда запускает программу open
, которая затем запускает программу
Calculator
.)
В Linux введите gnome-calculator
В Linux в именах программ и команд учитывается регистр символов, но в Windows и macOS регистр игнорируется. Это означает, что в Linux нужно ввести команду gnome-calculator
, тогда как в Windows допустимо ввести
Calc.exe
, а в macOS —
OPEN
-a Calculator
48
Глава 2.Подготовка среды и командная строка
Когда вы указываете имена программ в командной строке, это равносильно за- пуску программы-калькулятора из меню
Пуск
, Finder или Dash. Имена программ работают как команды, потому что программы calc.exe
, open и
gnome-calculator на- ходятся в папках, включенных в переменные среды
PATH
. Эта тема более подробно рассматривается в разделе «Переменные среды и PATH», с. 60. А пока достаточно сказать, что при вводе имени программы в командной строке оболочка проверяет, существует ли программа с указанным именем в одной из папок, включенных в
PATH
В Windows оболочка ищет программу в текущем рабочем каталоге (который указан в приглашении), а потом переходит к проверке папок из
PATH
. Чтобы приказать командной строке в macOS и Linux начать с проверки текущего рабочего каталога, необходимо ввести
./
перед именем файла.
Если программа не находится в папке, включенной в
PATH
, у вас есть два варианта.
Воспользоваться командой cd для назначения текущим рабочим каталогом папки, содержащей программу, а затем указать имя программы. Например, можно ввести следующие две команды:
cd C:\Windows\System32
calc.exe
Введите полный путь к исполняемому файлу программы. Например, вместо calc.exe укажите
C:\Windows\System32\calc.exe
В Windows, если имя программы завершается расширением
.exe или
.bat
, расшире- ние приводить необязательно; если просто ввести имя calc
, результат будет таким же, как в случае ввода calc.exe
. Исполняемые программы в macOS и Linux часто не имеют специальных расширений, помечающих их как исполняемые; вместо этого для них устанавливается разрешение исполнения. Дополнительную информацию вы найдете в разделе «Запуск программ Python без командной строки», с. 65.
Аргументы командной строки
Аргументы командной строки представляют собой текстовые фрагменты, которые вводятся после имени команды. Как и аргументы, передаваемые при вызове функций
Python, они предоставляют команде дополнительную информацию или указания.
Например, при выполнении команды cd C:\Users часть
C:\Users является аргументом команды cd
, которая сообщает команде, какая папка должна стать текущим рабочим каталогом. Или при запуске сценария Python из окна терминала командой python yourScript.py часть yourScript.py является аргументом, который сообщает програм- ме python
, в каком файле следует искать выполняемую последовательность команд.
Ключи командной строки (их также называют флагами или опциями) представля- ют собой однобуквенные или короткие аргументы командной строки. В системе
Командная строка
49
Windows ключи командной строки часто начинаются с косой черты (
/
); в macOS и Linux они начинаются с одного дефиса (
-
) или двух дефисов (
--
). Вы уже ис- пользовали ключ командной строки
-a при выполнении команды macOS open
-a
Calculator
. В macOS и Linux в ключах командной строки часто различается регистр символов, но в Windows регистр игнорируется. Ключи командной строки разделяются пробелами.
Имена папок и файлов часто используются в качестве аргументов командной стро- ки. Если имя папки или файла содержит пробел, заключите имя в двойные кавычки, чтобы не создавать путаницу в командной строке. Например, если вы хотите сделать текущим каталогом папку с именем
Vacation Photos
, при вводе команды cd
Vacation
Photos командная строка решит, что вы передаете два аргумента,
Vacation и
Photos
Поэтому следует ввести команду cd
"Vacation
Photos"
:
C:\Users\Al>cd "Vacation Photos"
C:\Users\Al\Vacation Photos>
Другой типичный аргумент многих команд —
--help в macOS и Linux или
/?
в Windows. Они выводят информацию о команде. Например, если выполнить команду cd
/?
в Windows, командная оболочка сообщит, что делает команда cd
, и выведет сводку аргументов командной строки этой команды:
C:\Users\Al>cd /?
Вывод имени либо смена текущего каталога.
CHDIR [/D] [диск:][путь]
CHDIR [..]
CD [/D] [диск:][путь]
CD [..]
.. обозначает переход в родительский каталог.
Команда CD диск: отображает имя текущего каталога указанного диска.
Команда CD без параметров отображает имена текущих диска и каталога.
Параметр /D используется для одновременной смены текущих диска и каталога.
Справка сообщает, что команда Windows cd также может вводиться по имени chdir
. (Большинство пользователей не станет вводить chdir
, когда более корот- кая команда cd делает то же самое.) Квадратные скобки содержат необязательные аргументы. Например, описание
CD
[/D]
[диск:][путь]
указывает, что с ключом
/D
можно задать диск или путь.
Хотя аргументы
/?
и
--help для команд выводят информацию, объяснения часто выглядят не совсем понятно и годятся лишь для опытных пользователей. Они вряд ли помогут новичкам. Лучше обратиться к книге или веб-учебнику.
50
Глава 2.Подготовка среды и командная строка
Выполнение кода Python из командной строки с ключом -c
Если вам понадобится небольшой объем временного кода Python, который нужно выполнить один раз, а потом выбросить, передайте ключ
-c при вызове python.exe в Windows или python3
в macOS и Linux. Выполняемый код следует указать по- сле ключа
-c в двойных кавычках. Например, введите следующую команду в окне терминала:
C:\Users\Al>python -c "print('Hello, world')"
Hello, world
Ключ
-c хорошо подходит для просмотра результатов одной инструкции Python, когда вы не желаете тратить время на вход в интерактивную оболочку. Например, можно быстро отобразить вывод функции help()
, а затем вернуться в командную строку:
C:\Users\Al>python -c "help(len)"
Help on built-in function len in module builtins:
len(obj, /)
Return the number of items in a container.
C:\Users\Al>
Выполнение программ Python из командной строки
Программы Python представляют собой текстовые файлы с расширением
.py
. Они не являются исполняемыми файлами; интерпретатор Python читает эти файлы и выполняет содержащиеся в них команды Python. В Windows исполняемый файл интерпретатора называется python.exe
, а в macOS и Linux — python3
(файл python содержит интерпретатор Python версии 2). При выполнении команды python yourScript.py или python3
yourScript.py будут выполнены команды Python, хра- нящиеся в файле с именем yourScript.py
Запуск программы py.exe
В системе Windows Python устанавливает программу py.exe в папку
C:\Windows
. Эта программа идентична python.exe
, но она получает дополнительный аргумент команд- ной строки, который позволяет запустить любую версию Python, установленную на вашем компьютере. Команду py можно выполнить из любой папки, потому что папка
C:\Windows включена в переменную среды
PATH
. Если у вас установлено сразу несколько версий Python, команда py автоматически запустит новейшую версию из доступных на компьютере. Также можно передать аргумент командной строки
-3
или
-2
, чтобы запустить новейшую из установленных версий: Python 3 или Python 2
Командная строка
51
соответственно. Еще можно ввести более конкретный номер версии (например,
-3.6
или
-2.7
), чтобы запустить конкретную версию Python. После ключа версии следует передать py.exe все те же аргументы командной строки, которые передаются python.exe
. Выполните следующие команды из командной строки Windows:
C:\Users\Al>py -3.6 -c "import sys;print(sys.version)"
3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 03:37:03) [MSC v.1900 64 bit (AMD64)]
C:\Users\Al>py -2.7
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
Программа py.exe удобна в тех случаях, когда на вашем компьютере с Windows установлено несколько версий Python и вы хотите запустить конкретную версию.
Выполнение команд из программы Python
Функция Python subprocess.run()
из модуля subprocess может выполнять коман- ды оболочки из программ Python, а затем выводить результат выполнения команды в виде строки. Например, следующий код выполняет команду ls
-al
:
>>> import subprocess, locale
>>> procObj = subprocess.run(['ls', '-al'], stdout=subprocess.PIPE)
❶
>>> outputStr = procObj.stdout.decode(locale.getdefaultlocale()[1])
❷
>>> print(outputStr)
total 8
drwxr-xr-x 2 al al 4096 Aug 6 21:37 .
drwxr-xr-x 17 al al 4096 Aug 6 21:37 ..
-rw-r--r-- 1 al al 0 Aug 5 15:59 spam.py
Функции subprocess.run()
передается список
['ls',
'-al']
❶
. Он содержит имя команды ls
, за которым следуют аргументы в виде отдельных строк. Обратите вни- мание: с передачей
['ls
-al']
функция работать не будет. Вывод команды хранится в виде строки в outputStr
❷
. Электронная документация функций subprocess.
run()
и locale.getdefaultlocale()
даст вам лучшее представление о том, как они действуют, причем с ними ваш код будет работать в любой операционной системе, где функционирует Python.
Сокращение объема вводимого текста при помощи автозавершения
Программисты занимаются вводом команд на своих компьютерах по несколько часов в день, поэтому современные средства командной строки предоставляют возможности для сокращения объема вводимого текста. Функция автозавершения
52
Глава 2.Подготовка среды и командная строка позволяет ввести несколько первых символов имени папки или файла, а затем на- жать клавишу
Tab
, чтобы командная оболочка заполнила имя до конца.
Например, если ввести cd c:\u и нажать
Tab в Windows, текущая команда проверит, какие папки или файлы на диске C:\ начинаются с u
, и автоматически завершит имя каталога c:\Users
. Буква u
нижнего регистра при этом автоматически преобразуется в
U
. (В macOS и Linux автозавершение не исправляет регистр.) Если на диске C:\ сразу несколько папок, имена которых начинаются на U, вы можете перебрать их повторными нажатиями
Tab
. Чтобы сократить количество совпадений, также можно ввести команду cd c:\us
; тем самым набор возможных вариантов ограничивается папками и файлами, имена которых начинаются с us
Многократное нажатие
Tab также работает в macOS и Linux. В следующем примере пользователь ввел команду cd
D
и дважды нажал
Tab
:
al@al-VirtualBox:$ cd D
Desktop/ Documents/ Downloads/
al@al-VirtualBox:$ cd D
Двукратное нажатие
Tab после ввода D заставляет оболочку показать все возможные варианты. Оболочка выдает новое приглашение с командой, указанной к настоя- щему моменту. В этот момент можно ввести, допустим, букву e
и нажать
Tab
, чтобы оболочка завершила команду cd
Desktop/
Автозавершение настолько полезно, что эта функция включена во многие гра- фические интегрированные среды и текстовые редакторы. В отличие от средств командной строки эти GUI-программы обычно отображают небольшое меню под вводимым текстом, чтобы вы могли выбрать нужный вариант для автоматического завершения оставшейся части команды.
Просмотр истории команд
Современные командные оболочки также запоминают введенные команды в исто-
рии команд. При нажатии клавиши
↑ в терминале командная строка заполняется последней введенной вами командой. Дальнейшие нажатия клавиши
↑ продолжают перебирать более ранние команды, а нажатия клавиши
↓ возвращают к более позд- ним командам. Если вы хотите отменить команду в приглашении и начать с нового приглашения, нажмите
Ctrl-C
В системе Windows можно просмотреть историю команд при помощи команды doskey/history
. (Странное название программы doskey восходит к MS-DOS — операционной системе Microsoft, предшественнику Windows.) В macOS и Linux для истории команд предназначена команда history
Командная строка
53
Часто используемые команды
В этом разделе приведен короткий список команд, которые чаще других исполь- зуются в режиме командной строки. Команд и аргументов гораздо больше, но вы можете рассматривать этот список как некий минимум, необходимый для работы с командной строкой.
Аргументы командной строки для команд этого раздела заключены в квадратные скобки. Например, cd
[
папка
]
означает, что вы вводите команду cd
, за которой следует имя новой папки.
Определение папок и файлов с использованием универсальных символов
Многим командам в аргументах командной строки должны передаваться имена папок и файлов. Часто такие команды могут получать шаблоны с универсальны- ми символами
*
и
?
, которые определяют набор подходящих файлов. Символ
*
означает любое количество символов, тогда как символ
?
— один произвольный символ. Выражения с универсальными символами
*
и
?
называются глобальными
шаблонами.
Глобальные шаблоны позволяют определять группы файлов. Например, команда dir или ls используется для вывода всех файлов и папок в текущем рабочем ката- логе. Но если вы хотите просмотреть только файлы Python, команда dir
*.py или ls
*.py выведет только файлы с расширением
.py
. Глобальный шаблон
*.py означает
«любая группа символов, за которой следует
.py
»:
C:\Users\Al>dir *.py
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
03/24/2019 10:45 PM 8,399 conwaygameoflife.py
03/24/2019 11:00 PM 7,896 test1.py
10/29/2019 08:18 PM 21,254 wizcoin.py
3 File(s) 37,549 bytes
0 Dir(s) 506,300,776,448 bytes free
Глобальный шаблон records201?.txt означает «символы records201
, за которыми следует один произвольный символ, а потом
.txt
». Шаблон выберет файлы от records2010.txt до records2019.txt
(а также имена файлов вида records201X.txt
). Гло- бальный шаблон records20??.txt может включать два любых символа — например, records2021.txt или records20AB.txt
54
Глава 2.Подготовка среды и командная строка
Изменение текущего рабочего каталога командой cd
Выполнение команды cd
[
папка
]
заменяет текущий рабочий каталог командной оболочки указанной папкой:
C:\Users\Al>cd Desktop
C:\Users\Al\Desktop>
Оболочка выводит текущий рабочий каталог как часть приглашения командной строки, а все папки и файлы, указанные в командах, интерпретируются относи- тельно этого каталога.
Если имя папки содержит пробелы, заключите его в двойные кавычки. Чтобы выбрать в качестве текущего рабочего каталога домашнюю папку пользователя, введите команду cd
в macOS и Linux или команду cd
%USERPROFILE%
в Windows.
В системе Windows, если вы захотите изменить текущий диск, сначала необходимо указать имя диска в отдельной команде:
C:\Users\Al>d:
D:\>cd BackupFiles
D:\BackupFiles>
Для перехода к родительскому каталогу текущего рабочего каталога используйте в качестве имени папки
C:\Users\Al>cd ..
C:\Users>
Вывод содержимого папки командами dir и ls
В системе Windows команда dir выводит список папок и файлов в текущем рабо- чем каталоге. Команда ls делает то же самое в macOS и Linux. Содержимое другой папки выводится командой dir
[
другая папка
]
или ls
[
другая папка
]
Ключи
-l и
-a передают полезные аргументы для команды ls
. По умолчанию ls выводит только имена папок и файлов. Чтобы вывести подробную информацию с размером файла, разрешениями, временными метками последнего изменения и другой информацией, используйте ключ
-l
. По существующим соглашениям операционные системы macOS и Linux считают, что файлы, имена которых на- чинаются с точки, являются конфигурационными файлами, и скрывают их от нормальных команд. Чтобы команда ls выводила все файлы, включая скрытые, используйте ключ
-a
. Чтобы в результатах подробная информация объединялась
Командная строка
55
с выводом всех файлов, объедините эти ключи: ls
-al
. Вот пример окна терминала для macOS или Linux:
al@ubuntu:$ ls
Desktop Downloads mu_code Pictures snap Videos
Documents examples.desktop Music Public Templates al@ubuntu:$ ls -al
total 112
drwxr-xr-x 18 al al 4096 Aug 4 18:47 .
drwxr-xr-x 3 root root 4096 Jun 17 18:11 ..
-rw------- 1 al al 5157 Aug 2 20:43 .bash_history
-rw-r--r-- 1 al al 220 Jun 17 18:11 .bash_logout
-rw-r--r-- 1 al al 3771 Jun 17 18:11 .bashrc drwx------ 17 al al 4096 Jul 30 10:16 .cache drwx------ 14 al al 4096 Jun 19 15:04 .config drwxr-xr-x 2 al al 4096 Aug 4 17:33 Desktop
В системе Windows аналогом ls
-al является команда dir
. Пример окна терминала для Windows:
C:\Users\Al>dir
Volume in drive C is Windows
Volume Serial Number is DFF3-8658
Directory of C:\Users\Al
06/12/2019 05:18 PM
06/12/2019 05:18 PM
12/04/2018 07:16 PM
--snip--
08/31/2018 12:47 AM 14,618 projectz.ipynb
10/29/2014 04:34 PM 121,474 foo.jpg
Вывод содержимого вложенных папок командами dir /s и find
В системе Windows команда dir
/s выводит содержимое текущего рабочего каталога и его подкаталогов. Например, следующая команда выводит все файлы
.py в папке
C:\ github\ezgmail
, а также во всех ее вложенных папках:
C:\github\ezgmail>dir /s *.py
Volume in drive C is Windows
Volume Serial Number is DEE0-8982
Directory of C:\github\ezgmail
06/17/2019 06:58 AM 1,396 setup.py
1 File(s) 1,396 bytes
Directory of C:\github\ezgmail\docs
56
Глава 2.Подготовка среды и командная строка
12/07/2018 09:43 PM 5,504 conf.py
1 File(s) 5,504 bytes
Directory of C:\github\ezgmail\src\ezgmail
06/23/2019 07:45 PM 23,565 __init__.py
12/07/2018 09:43 PM 56 __main__.py
2 File(s) 23,621 bytes
Total Files Listed:
4 File(s) 30,521 bytes
0 Dir(s) 505,407,283,200 bytes free
Команда find
-name делает то же самое в macOS и Linux: al@ubuntu:/Desktop$ find . -name "*.py"
./someSubFolder/eggs.py
./someSubFolder/bacon.py
./spam.py
Символ приказывает find начать поиск в текущем рабочем каталоге. С ключом
-name команда find ищет папки и файлы по имени. Фрагмент "*.py"
приказывает find искать папки и файлы с именами, соответствующими шаблону
*.py
. Следует заметить, что команда find требует, чтобы аргумент после
-name был заключен в двойные кавычки.
Копирование файлов и папок командами copy и cp
Чтобы создать дубликат файла или папки в другом каталоге, выполните команду copy
[
исходный файл или папка
]
[
приемная папка
]
или cp
[
исходный файл или
папка
]
[
приемная папка
]
. Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ cp hello.py someSubFolder
al@ubuntu:/someFolder$ cd someSubFolder
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Перемещение файлов и папок командами move и mv
В Windows перемещение исходного файла или папки в другую папку выполняется командой move
[
исходный файл или папка
]
[
приемная папка
]
. Команда mv
[
исходный
файл или папка
]
[
приемная папка
]
делает то же самое в macOS и Linux.
Пример окна терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder
Командная строка
57
al@ubuntu:/someFolder$ mv hello.py someSubFolder
al@ubuntu:/someFolder$ ls
someSubFolder al@ubuntu:/someFolder$ cd someSubFolder/
al@ubuntu:/someFolder/someSubFolder$ ls
hello.py
Файл hello.py переместился из
/someFolder в
/someFolder/someSubFolder
, в исходной папке он отсутствует.
КОРОТКИЕ ИМЕНА КОМАНД
Когда я только начал изучать операционную систему Linux, меня удивило, что известная мне команда copy в Linux называлась cp
. Имя copy было намного более понятным, чем cp
. Стоило ли создавать лаконичное, малопонятное имя ради экономии всего двух вводимых символов?
Со временем у меня появилось больше опыта работы с командной стро- кой, и я понял, что ответ на этот вопрос — уверенное «да». Мы читаем ис- ходный код чаще, чем пишем его, так что развернутые имена переменных и функций приносят пользу. Но мы вводим команды в командной строке чаще, чем читаем их, поэтому в данном случае справедливо обратное: ко- роткие имена упрощают работу с командной строкой и снижают нагрузку на запястья.
Переименование файлов и папок командами ren и mv
Команда ren
[
файл или папка
]
[
новое имя
]
переименовывает файл или папку в Windows, а команда mv
[
файл или папка
]
[
новое имя
]
делает то же самое в macOS и Linux.
Следует заметить, что команда mv в macOS и Linux может использоваться для перемещения и переименования файлов. Если указать имя существующей папки во втором аргументе, команда mv перемещает туда файл или папку. Если задать имя, которое не соответствует существующему файлу или папке, команда mv пере- именовывает файл или папку. Пример в окне терминала Linux:
al@ubuntu:/someFolder$ ls
hello.py someSubFolder al@ubuntu:/someFolder$ mv hello.py goodbye.py
al@ubuntu:/someFolder$ ls
goodbye.py someSubFolder
Теперь файл hello.py существует под именем goodbye.py
58
Глава 2.Подготовка среды и командная строка
Удаление файлов и папок командами del и rm
Чтобы удалить файл или папку в Windows, выполните команду del
[
файл или пап-
ка
]
. В macOS и Linux для этого используется команда rm
[
файл
]
(
rm
— сокращение от remove).
Две команды удаления несколько отличаются друг от друга. В Windows выпол- нение del для папки удаляет все содержащиеся в ней файлы, но не вложенные папки. Команда del также не удаляет исходную папку; для этого необходимо воспользоваться командой rd или rmdir
(см. «Удаление папок командами rd и rmdir», с. 59). Кроме того, выполнение команды del
[
папка
]
не приведет к уда- лению каких-либо файлов в папках, вложенных в исходную. Чтобы удалить их, выполните команду del
/s
/q
[
папка
]
. Ключ
/s выполняет команду del вместе с вложенными папками, а ключ
/q фактически означает «делай, как я сказал, и не спрашивай подтверждения».
На рис. 2.4 продемонстрированы различия между командами.
Рис. 2.4. Файлы в этих папках удаляются при выполнении команды del delicious (слева) или del /s /q delicious (справа)
В macOS и Linux команда rm не может использоваться для удаления папок. Впро- чем, вы можете выполнить команду rm
-r
[
папка
]
для удаления папки и всего ее содержимого. В системе Windows то же самое делает команда rd
/s
/q
[
папка
]
(рис. 2.5).
Командная строка
59
Рис. 2.5. Файлы в этих папках удаляются при выполнении команды rd /s /q delicious или rm -r delicious
Создание папок командами md и mkdir
Команда md
[
новая папка
]
создает новую пустую папку в Windows, а команда mkdir
[
новая папка
]
делает то же самое в macOS и Linux. Команда mkdir также работает в Windows, но md вводить быстрее.
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ cd yourScripts
al@ubuntu:/Desktop/yourScripts$ ls
❶
al@ubuntu:/Desktop/yourScripts$
Обратите внимание: только что созданная папка yourScripts пуста; когда мы вы- полняем команду ls для вывода ее содержимого, не выводится ничего
❶
Удаление папок командами rd и rmdir
Команда rd
[
исходная папка
]
удаляет исходную папку в Windows, а команда rmdir
[
исходная папка
]
— в macOS и Linux. Как и в случае с mkdir
, команда rmdir также работает в Windows, но команду rd вводить быстрее. Чтобы папку можно было удалить, она должна быть пустой.
60
Глава 2.Подготовка среды и командная строка
Пример в окне терминала Linux:
al@ubuntu:/Desktop$ mkdir yourScripts
al@ubuntu:/Desktop$ ls
yourScripts al@ubuntu:/Desktop$ rmdir yourScripts
al@ubuntu:/Desktop$ ls
al@ubuntu:/Desktop$
Этот пример сначала создает пустую папку yourScripts
, а затем удаляет ее.
Чтобы удалить непустую папку (вместе со всеми папками и файлами в ней), вы- полните команду rd
/s/q
[
исходная папка
]
в Windows или команду rm
-rf
[
исходная
папка
]
в macOS и Linux.
Поиск программ командами where и which
Команда where
[
программа
]
в Windows или which
[
программа
]
в macOS и Linux сообщает точное местонахождение программы. Когда вы вводите команду в команд- ной строке, осуществляется поиск программы в папках, входящих в переменную среды
PATH
(правда, Windows начинает с текущего рабочего каталога).
Эти команды сообщают, какая исполняемая программа Python запускается при вводе команды python в командной оболочке. Если у вас установлено сразу не- сколько версий Python, на компьютере могут существовать разные исполняемые программы с одинаковыми именами. Выбор запускаемой программы зависит от порядка следования папок в переменной среды
PATH
, а команды where и which вы- водят ее полное имя:
C:\Users\Al>where python
C:\Users\Al\AppData\Local\Programs\Python\Python38\python.exe
В этом примере имя папки указывает, что версия Python, запускаемая из оболочки, находится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38\
Очистка терминала командами cls и clear
Команда cls в Windows или clear в macOS и Linux стирает весь текст в окне тер- минала. Например, эта возможность пригодится, если вы хотите начать с пустого окна терминала.
Переменные среды и PATH
У всех выполняемых процессов программы, на каком бы языке она ни была на- писана, имеется набор переменных среды, где хранятся строки. Переменные среды
Переменные среды и PATH
61
часто содержат настройки системного уровня, которые могут оказаться полезными в каждой программе. Например, переменная среды
TEMP
содержит путь к катало- гу, где любая программа может хранить временные файлы. Когда операционная система запускает программу (например, командную строку), созданный процесс получает собственную копию переменных среды операционной системы. Перемен- ные среды процесса могут изменяться независимо от набора значений переменных среды операционной системы. Но эти изменения действуют только на этот процесс, но не на операционную систему или другие процессы.
Я рассматриваю переменные среды в этой главе, потому что одна из этих перемен- ных —
PATH
— пригодится вам при запуске программ из командной строки.
Просмотр переменных среды
Чтобы просмотреть список переменных среды для окна терминала, выполните команду set
(в Windows) или env
(в macOS или Linux) в командной строке:
C:\Users\Al>set
ALLUSERSPROFILE=C:\ProgramData
APPDATA=C:\Users\Al\AppData\Roaming
CommonProgramFiles=C:\Program Files\Common Files
--snip--
USERPROFILE=C:\Users\Al
VBOX_MSI_INSTALL_PATH=C:\Program Files\Oracle\VirtualBox\
windir=C:\WINDOWS
Слева от знака равенства (
=
) указывается имя переменной среды, а справа — стро- ковое значение. Каждый процесс содержит отдельный набор переменных среды, так что разные командные строки могут содержать разные значения своих пере- менных среды.
Для просмотра значения одной переменной среды также можно воспользоваться командой echo
. Команда echo
%HOMEPATH%
в Windows или echo
$HOME
в macOS или
Linux выводит значение переменных среды
HOMEPATH
или
HOME
соответственно, которые содержат домашнюю папку текущего пользователя. В Windows результат выглядит так:
C:\Users\Al>echo %HOMEPATH%
\Users\Al
Результат в macOS или Linux:
al@al-VirtualBox:$ echo $HOME
/home/al
Если этот процесс создает другой процесс (например, как командная строка за- пускает интерпретатор Python), дочерний процесс получает собственную копию
62
Глава 2.Подготовка среды и командная строка переменных среды родительского процесса. После этого дочерний процесс может изменить значения своих переменных среды, и наоборот.
Набор переменных среды операционной системы можно рассматривать как эта- лонную копию, с которой процесс копирует свои переменные среды. Переменные среды операционной системы изменяются реже переменных программы Python.
Более того, многие пользователи вообще не изменяют значения переменных среды.
Переменная среды PATH
Когда вы вводите команду (например, python в Windows или python3
в macOS и Linux), терминал ищет программу с таким именем в текущей папке. Если програм- ма там не найдена, то проверяются папки, перечисленные в переменной среды
PATH
Например, на моем компьютере с Windows файл программы python.exe хранится в папке
C:\Users\Al\AppData\Local\Programs\Python\Python38
. Чтобы его запустить, мне придется ввести полное имя
C:\Users\Al\AppData\Local\Programs\Python\Python38\
python.exe или сначала перейти в эту папку, а затем ввести python.exe
. Длинное имя приходится набирать долго, поэтому я включил эту папку в переменную среды
PATH
Теперь при вводе python.exe командная строка ищет программу с заданным именем в папках, перечисленных в
PATH
, а мне не приходится вводить путь полностью.
Так как переменная среды может содержать только одно строковое значение, для включения нескольких имен папок в переменную среды
PATH
следует использовать специальный формат. В Windows имена папок разделяются символами
;
(точка с запятой). Для просмотра текущего содержимого
PATH
введите команду path
:
C:\Users\Al>path
C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
В macOS и Linux имена точек разделяются двоеточиями:
al@ubuntu:$ echo $PATH
/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/
bin:/usr/games:/usr/local/games:/snap/bin
Порядок имен папок важен. Если в папках
C:\WINDOWS\system32
и
C:\WINDOWS
находятся два разных файла с именем someProgram.exe
, то при вводе команды someProgram.exe будет выполнена программа из
C:\WINDOWS\system32
, потому что эта папка первой встречается в переменной среды
PATH
Если введенная вами программа или команда не существует ни в текущем рабо- чем каталоге, ни в одном из подкаталогов в PATH, командная строка сообщает об ошибке — например, command not found or not recognized as an internal or external
Переменные среды и PATH
63
command
(Команда не найдена или не опознана как внутренняя или внешняя коман- да). Если вы не допустили опечатку, проверьте, в какой папке находится программа и включена ли эта папка в переменную среды
PATH
Изменение переменной среды PATH в командной строке
Переменную среды
PATH
текущего окна терминала можно изменить, включив в нее дополнительные папки. Процессы добавления папок в
PATH
несколько различают- ся в Windows и macOS/Linux. В Windows для добавления новой папки в текущее значение
PATH
можно воспользоваться командой path
:
C:\Users\Al>path C:\newFolder;%PATH%
❶
C:\Users\Al>path
❷
C:\newFolder;C:\Path;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;
C:\Users\Al\AppData\Local\Microsoft\WindowsApps
Часть
%PATH%
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующего значения
PATH
. Снова выполните команду path
, чтобы просмотреть новое значение
PATH
❷
В macOS и Linux для назначения переменной среды
PATH
можно использовать синтаксис, сходный с синтаксисом команды присваивания в Python:
al@al-VirtualBox:$ PATH=/newFolder:$PATH
❶
al@al-VirtualBox:$ echo $PATH
❷
/newFolder:/home/al/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/
bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
Часть
$PATH
❶
заменяется текущим значением переменной среды
PATH
, так что фактически вы добавляете новую папку и точку с запятой в начало существующе- го значения
PATH
. Снова выполните команду echo
$path
, чтобы просмотреть новое значение
PATH
❷
Но оба описанных способа добавления папок в
PATH
применяются только к теку- щему окну терминала и ко всем программам, которые запускаются из него после добавления. Если вы откроете новое окно терминала, в нем этих изменений уже не будет. Чтобы папка была включена в
PATH
постоянно, необходимо изменить эталонный набор переменных среды операционной системы.
Постоянное включение папок в PATH в Windows
В Windows существуют два набора переменных среды: системные переменные
среды (которые распространяются на всех пользователей) и переменные среды
64
Глава 2.Подготовка среды и командная строка
пользователя (которые переопределяют значения системных переменных среды, но распространяются только на текущего пользователя). Чтобы отредактировать их, откройте меню
Пуск и введите
Edit environment variables for your account
(От- редактируйте переменные среды для своей учетной записи). Открывается окно
Переменные среды
(рис. 2.6).
Рис. 2.6. Окно Переменные среды в Windows
Выберите
Path в списке переменных среды пользователя (не в списке системных переменных!), щелкните на кнопке
Изменить и введите новое имя папки в открыв- шемся текстовом поле (не забудьте о разделителе
;
). Щелкните на кнопке
OK
Это не самый удобный интерфейс, и, если вам приходится часто редактировать переменные среды в Windows, я рекомендую установить бесплатную программу
Rapid Environment Editor (https://www.rapidee.com/). Учтите, что после установки необходимо запустить программу с правами администратора, чтобы редактировать системные переменные среды. Щелкните на кнопке
Пуск
, введите
Rapid Environment
Запуск программ Python без командной строки
65
Editor
, щелкните правой кнопкой мыши на значке программы и выберите команду
Запуск от имени администратора
В командной строке для постоянного изменения системной переменной
PATH
можно воспользоваться командой setx
:
C:\Users\Al>setx /M PATH "C:\newFolder;%PATH%"
Для выполнения команды setx необходимо запустить командную строку с правами администратора.
Постоянное включение папок в PATH в macOS и Linux
Чтобы добавить папки в переменные среды
PATH
для всех окон терминала в macOS и Linux, необходимо изменить текстовый файл
.bashrc в домашней папке. Добавьте в него следующую строку:
export PATH=/newFolder:$PATH
Эта строка изменяет
PATH
для всех будущих окон терминала. В macOS Catalina и в более поздних версиях оболочка по умолчанию сменилась с Bash на Z Shell, в этом случае необходимо изменить файл
.zshrc в домашней папке.
Запуск программ Python без командной строки
Вероятно, вы уже умеете запускать программы из оболочек, предоставляемых ва- шей операционной системой. В Windows существует меню
Пуск
, в macOS — Finder и Dock, а в Ubuntu Linux — Dash. Программы добавляют себя в эти оболочки при установке. Также программу можно запустить двойным щелчком на значке про- граммы в файловом менеджере (таком, как
Проводник в Windows, Finder в macOS или Files в Ubuntu Linux).
Но для программ Python эти способы не годятся. Часто при двойном щелчке на файле
.py программа Python не запускается, а открывается в редакторе или IDE.
А попытавшись запустить Python напрямую, вы просто откроете интерактивную оболочку Python. Чтобы запустить программу Python, пользователи чаще всего открывают ее в IDE и выбирают команду меню
Run или же выполняют ее в команд- ной строке. Оба способа не слишком удобны, если вам нужно просто запустить программу Python.
Но вы можете настроить программы Python так, чтобы они запускались из обо- лочки вашей операционной системы (как и другие приложения, установленные в системе). Далее я подробно расскажу, как сделать это в конкретной операци- онной системе.
66
Глава 2.Подготовка среды и командная строка
Запуск программ Python в Windows
В системе Windows программы Python можно запустить еще несколькими спо- собами. Не стоит открывать окно терминала, можно открыть диалоговое окно запуска программы клавишами WIN-R, а затем ввести команду py
C:\path\to\
yourScript.py
, как показано на рис. 2.7. Программа py.exe находится в папке
C:\
Windows
, которая уже включена в переменную окружения
PATH
, а указывать рас- ширение
.exe при запуске программ необязательно.
Рис. 2.7. Диалоговое окно запуска программы в Windows
Тем не менее этот способ требует ввода полного пути к вашему сценарию. Кроме того, окно терминала, в котором отображается вывод программы, автоматически закрывается при ее завершении, и вы можете упустить часть вывода.
Проблемы удается решить созданием пакетного сценария — небольшого текстового файла с расширением
.bat
, который может выполнять сразу несколько терминаль- ных команд (по аналогии со сценариями командной оболочки в macOS и Linux). Для создания этих файлов можно воспользоваться текстовым редактором (например,
Блокнотом
). Создайте новый текстовый файл, содержащий следующие две строки:
@py.exe C:\path\to\yourScript.py %*
@pause
Замените этот путь абсолютным путем к вашей программе и сохраните файл с расширением
.bat
(например, yourScript.bat
). Знак
@
в начале каждой команды предотвращает ее вывод в окне терминала, а
%*
передает все аргументы команд- ной строки, введенные после имени пакетного файла, сценарию Python. В свою очередь, сценарий Python читает аргументы командной строки из списка sys.argv
Пакетный файл избавляет вас от необходимости вводить полный абсолютный путь
Запуск программ Python без командной строки
67
к программе Python каждый раз, когда вы захотите ее выполнить. Команда
@pause добавляет сообщение
Press any key to continue...
в конец сценария Python, чтобы окно программы не исчезало с экрана слишком быстро.
Я рекомендую разместить все пакетные файлы и файлы
.py в одной папке, уже вклю- ченной в переменную среды
PATH
— например, в домашнюю папку
C:\Users\<
ИМЯ_
ПОЛЬЗОВАТЕЛЯ
>
. После создания пакетного файла для запуска сценария Python вам достаточно нажать WIN-R, ввести имя пакетного файла (указывать расширение
.bat не обязательно) и нажать ENTER.
Запуск программ Python в macOS
В macOS можно создать сценарий командной оболочки для запуска сценариев
Python; для этого следует создать текстовый файл с расширением
.command
. Соз- дайте такой файл в текстовом редакторе (например, TextEdit) и введите следующие команды:
#!/usr/bin/env bash python3 /path\to\yourScript.py
Сохраните этот файл в домашней папке. В окне терминала сделайте этот сценарий исполняемым при помощи команды chmod u+x
вашСценарий
.command
. Теперь вы сможете щелкнуть на значке Spotlight (или нажать COMMAND-ПРОБЕЛ) или ввести имя сценария оболочки, чтобы выполнить его. А сценарий оболочки за- пустит ваш сценарий Python.
Запуск программ Python в Ubuntu Linux
В Ubuntu Linux не существует быстрого способа запуска сценариев Python, похожего на те, которые существуют в Windows и macOS, но все же облегчить себе жизнь можно. Сначала убедитесь в том, что файл
.py хранится в домашней папке. Затем включите следующую строку, которая должна быть первой строкой файла
.py
:
#!/usr/bin/env python3
Строка сообщает Ubuntu, что для запуска этого файла должна использоваться про- грамма python3
. После этого выполните команду chmod в терминале, чтобы добавить для этого файла разрешение исполнения:
al@al-VirtualBox:$ chmod u+x yourScript.py
Теперь каждый раз, когда вы захотите быстро запустить сценарий Python, откройте новое окно терминала клавишами
Ctrl-Alt-T
. В терминале будет выбрана домашняя
68
Глава 2.Подготовка среды и командная строка папка, так что вы можете просто ввести
./yourScript.py для запуска этого сценария.
Префикс
./
необходим, потому что он сообщает Ubuntu, что сценарий yourScript.py находится в текущем рабочем каталоге (домашней папке в данном случае).
Итоги
Подготовка среды подразумевает действия, необходимые для перевода вашего компьютера в режим, в котором можно легко запускать программы. Для этого необходимо знать ряд низкоуровневых концепций, относящихся к работе вашего компьютера, таких как файловая система, пути к файлам, процессы, командная строка и переменные среды.
Файловая система определяет способ упорядоченного хранения файлов на вашем компьютере. Положение файла обозначается либо полным, абсолютным путем, либо путем, заданным относительно текущего рабочего каталога. Перемещение по файловой системе можно осуществлять из командной строки. Командную строку также называют терминалом, оболочкой или консолью, но все эти слова обознача- ют одно и то же: текстовую программу, в которой можно вводить команды. И хотя командная строка и имена часто используемых команд несколько различаются в Windows и macOS/Linux, по сути они решают одни и те же задачи.
Когда вы вводите команду или имя программы, командная строка проверяет папки, включенные в переменную среды
PATH
, в поисках имени. Это важно знать, чтобы по- нять причину ошибок command not found
(Команда не найдена). Последовательность действий при добавлении новых папок в переменную среды
PATH
также несколько отличается в Windows и macOS/Linux.
На освоение командной строки может потребоваться время, потому что вам при- дется изучать множество команд и аргументов командной строки. Не огорчайтесь, если вы тратите много времени для поиска информации в интернете; опытные разработчики занимаются этим каждый день.
1 2 3 4 5 6 7 8 9 ... 40
ЧАСТЬ II
ПЕРЕДОВЫЕ ПРАКТИКИ,
ИНСТРУМЕНТЫ
И МЕТОДЫ
3
Форматирование кода
при помощи Black
Форматированием кода называется его оформление посред- ством применения к нему определенного набора правил. Хотя форматирование кода не важно для компьютера, разбирающего вашу программу, оно существенно упрощает чтение кода людь- ми, а это необходимо для его успешного сопровождения. Если ваш код непонятен человеку (это может быть ваш коллега или даже вы сами), в нем трудно исправить ошибки или добавить новую функциональность.
Форматирование кода не является чисто косметической операцией. Удобочитае- мость — одна из важнейших причин популярности языка Python.
В этой главе рассматривается Black — система автоматического форматирования кода, в результате чего код становится последовательным и удобочитаемым без из- менения работы самой программы. Это полезный инструмент, потому что ручное форматирование в текстовом редакторе или IDE слишком утомительно. Сначала я приведу обоснования стилевых решений, которые принимает Black, а потом рас- скажу, как установить, использовать и настроить эту программу.
Как потерять друзей и настроить
против себя коллег
Существует много разных вариантов написания кода, которые приводят к одному и тому же результату. Например, при записи списка можно ставить один пробел после каждой запятой и последовательно применять только одну разновидность кавычек:
spam = ['dog', 'cat', 'moose']
Руководства по стилю и PEP 8 71
Но даже если в списке будут встречаться разные отступы и виды кавычек, код все равно останется действительным с точки зрения синтаксиса Python:
spam= [ 'dog' ,'cat',"moose"]
Программистам, предпочитающим первый вариант, может нравиться наглядное разделение элементов и единообразие в выборе кавычек. Но другие программисты иногда выбирают второй вариант, потому что они не хотят беспокоиться о подроб- ностях, которые не влияют на правильность работы программы.
Новички часто не обращают внимания на форматирование, потому что они сосре- доточены на концепциях программирования и синтаксисе языка. Тем не менее им следует выработать привычку к качественному форматированию кода. Программи- рование само по себе достаточно сложно, и написание кода, понятного для других
(и для вас в будущем), может весьма упростить его использование.
Даже если вы начинаете писать программу в одиночку, не факт, что впоследствии вы не объединитесь с единомышленниками. Если несколько программистов, работающих над одним файлом с исходным кодом, пишут каждый в своем стиле, результат может выглядеть как невразумительное месиво, даже если код работает без ошибок. Или, что еще хуже, некоторые начнут переформатировать код напарников «под себя», что в итоге приведет к потере времени и вызовет споры. Решение о том, сколько пробелов должно следовать после запятой, один или ни одного, — дело личных предпочтений.
Такие стилевые решения можно сравнить с выбором того, по левой или по правой стороне должны двигаться автомобили в стране; неважно, какую сторону считать правильной, — важно, чтобы все участники движения придерживались именно ее.
Руководства по стилю и PEP 8
Чтобы ваш код хорошо читался, проще всего следовать требованиям, прописанным в руководстве по стилю — документе, определяющем набор правил форматирования, которые должны соблюдаться в программном проекте. PEP 8 (Python Enhancement
Proposal 8) — одно из таких руководств, написанное командой разработчиков ядра
Python. Но некоторые компании разработали собственные руководства по стилю.
Текст PEP 8 можно найти в интернете по адресу https://www.python.org/dev/peps/pep-
0008/. Многие программисты Python рассматривают PEP 8 как авторитетный набор правил, хотя создатели PEP 8 утверждают иное. Раздел руководства «Тупой единый подход — беда мелких умов» напоминает читателю, что главной причиной для со- блюдения руководств по стилю является последовательность и удобочитаемость кода в рамках проекта, а не фанатичное соблюдение отдельных правил форматирования.
В PEP 8 даже включен следующий совет: «Знайте, когда стоит действовать непо- следовательно, — иногда рекомендации по стилю попросту неприменимы. Если не