Skip to content

Home Администрирование Выполнение инструкций в языке Python
Выполнение инструкций в языке Python


В окне терминала с интерактивной оболочкой Python введите следующую команду:


Если вам приходится тратить значительную часть времени на ввод команд в окне терминала, значит, вам уже приходилось выполнять инструкции и, возможно, перенаправлять вывод в файл или на вход другой команды UNIX. Рассмотрим порядок выполнения команды в Bash, а затем сравним его с порядком, принятым в Python. В окне терминала с командной оболочкой Bash введите следующую команду:


Пример с командной оболочкой Bash не нуждается в пояснениях, так как это обычная команда ls, но, если ранее вам никогда не приходилось сталкиваться с программным кодом на языке Python, пример с интерактивной оболочкой Python наверняка покажется вам немного странным. Вы могли бы подумать: «Это еще что за команда import sub-process?». Одна из самых важных особенностей Python заключается в его возможности импортировать модули или другие файлы, содержащие программный код и используемые в новых программах. Если вам знакома инструкция source в Bash, то вы увидите определенное сходство с ней. В данном конкретном случае важно понять, что вы им-портировли модуль subprocess и использовали его посредством синтаксической конструкции, показанной выше. Подробнее о том, как работают subprocess и import, мы расскажем позже, а пока не будем задумываться о том, почему эта инструкция работает, и обратимся к следующей строке:

Из Python можно выполнить любую команду оболочки, как если бы она выполнялась командной оболочкой Bash. Учитывая эту информацию, можно сконструировать версию команды ls на языке Python. Откройте предпочтительный текстовый редактор или новую вкладку в окне терминала, создайте файл с именем pyls.py и сделайте его выполняемым с помощью команды chmod +x pyls.py. Содержимое файла приводится в примере 1.1.


Если теперь запустить этот сценарий, вы получите тот же самый результат, что и при запуске команды ls -1 из командной строки:



Пример 1.1. Версия команды ls на языке Python

Этот пример может показаться глупым (да он таким и является), но он наглядно демонстрирует типичное применение Python в системном администрировании. Язык Python часто используется для «обертывания» других сценариев или команд UNIX. Теперь вы уже смогли бы


начать писать некоторые несложные сценарии, помещая в файл команды одну за другой. Рассмотрим простые примеры, которые реализованы именно таким способом. Вы можете либо просто скопировать содержимое примера 1.2, либо выполнить сценарии psysinfo.py и bash-sysinfo.py, которые можно найти в примерах в этом разделе.


Пример 1.3. Сценарий получения информации о системе - Bash



Пример 1.2. Сценарий получения информации о системе — Python

Если внимательно рассмотреть оба сценария, можно заметить, что они очень похожи. А если запустить их, будут получены идентичные результаты. Маленькое примечание: передавать в функции subpro-cess.call команду отдельно от аргумента совершенно необязательно. Можно использовать, например, такую форму записи:

Все замечательно, но мы еще не объяснили, как действует инструкция import и что из себя представляет модуль subprocess. В версии сценария на языке Python мы выполнили импортирование модуля subprocess, т. к. он содержит программный код, позволяющий выполнять вызов команд системы.


Как уже упоминалось ранее, импортируя модуль subprocess, мы просто импортируем файл, содержащий необходимый нам программный код. Вы можете создать свой собственный модуль, или файл, и неоднократно использовать написанный вами программный код, импортируя его точно так же, как мы импортировали программный код из модуля sub-process. В импортировании нет ничего необычного, просто в результате этой операции вы получаете в свое распоряжение файл с некоторым программным кодом в нем. Одна из замечательных особенностей интерактивной оболочки IPython состоит в ее способности заглядывать внутрь модулей и файлов и получать списки доступных атрибутов. Если говорить терминами UNIX, это напоминает действие команды Is в каталоге /usr/bin. Например, если вы оказались в новой системе, такой как Ubuntu или Solaris, а привыкли работать с Red Hat, то вы можете выполнить команду Is в каталоге /usr/bin, чтобы узнать - имеется ли в наличии такой инструмент, как wget, curl или lynx. Если вы хотите воспользоваться инструментом, находящимся в каталоге /usr/ bin, можно просто ввести команду /usr/bin/wget, например.

Ситуация с модулями, такими как subprocess, очень похожа на описанную выше. В интерактивной оболочке IPython можно использовать функцию автодополнения, чтобы увидеть, какие инструменты доступны внутри модуля. Воспользуемся возможностью автодополнения и посмотрим, какие атрибуты имеются внутри модуля subprocess. He забывайте, что модуль - это всего лишь файл с некоторым программным кодом внутри него. Ниже показано, что возвращает функция автодополнения в IPython для модуля subprocess:

Чтобы воспроизвести этот эффект, вам нужно просто ввести команду:

import subprocess затем ввести:

subprocess.


и нажать клавишу Tab, чтобы активизировать функцию автодополнения, которая выведет список доступных атрибутов. В третьей колонке нашего примера можно заметить subprocess.call. Теперь, чтобы получить дополнительную информацию об использовании subprocess.call, введите команду:

Символ вопросительного знака в данном случае трактуется как обращение к странице справочного руководства. Когда требуется узнать, как работает некоторый инструмент в системе UNIX, достаточно ввести команду:

man имя_инструмента

То же и с атрибутом внутри модуля, таким как subprocess.call. Когда в оболочке IPython после имени атрибута вводится вопросительный знак, выводится документация, которая была включена в атрибут. Если подобную операцию выполнить с атрибутами из стандартной библиотеки, вы сможете обнаружить достаточно полезную информацию по их использованию. Имейте в виду, что существует также возможность обратиться к документации с описанием стандартной библиотеки языка Python.

Когда мы смотрим на это описание, в стандартный раздел «Docstring», мы видим пример использования атрибута subprocess.call и описание того, что он делает.

Комментарии (0)

RSS feed Comments

Написать комментарий

smaller | bigger

busy
 

Регистрация




Top