Давайте напишем первую программу, которая перечисляет все файлы в текущем каталоге. Вы можете добавить любое количество параметров командной строки, разделяя их запятыми (,).
#!/usr/bin/python3
import subprocess
subprocess.call([«ls», «-l»])
Где
- Инструкция import используется для подключения модуля subprocess из стандартной библиотеки Python.
- Функция call из модуля subprocess предназначена для выполнения внешних команд.
Кроме функции call, в модуле subprocess есть и другие полезные функции, такие как:
- subprocess.run() — позволяет выполнять команды и возвращает объект CompletedProcess, который содержит информацию о выполнении.
- subprocess.Popen() — используется для более сложного взаимодействия с процессами, включая возможность управления вводом и выводом.
- subprocess.check_output() — выполняет команду и возвращает её вывод в виде строки, что удобно для обработки результатов.
Пример использования subprocess.run():
result = subprocess.run([«ls», «-l»], capture_output=True, text=True)
print(result.stdout)
В данном случае вывод команды будет сохранен в переменной result.stdout, что позволит вам легко его обработать или отобразить.
Важно помнить, что при выполнении внешних команд необходимо быть осторожным с вводом, чтобы избежать уязвимостей, связанных с инъекциями. Используйте списки вместо строк для передачи аргументов, чтобы минимизировать риск.
Дополнительно, полезно учитывать следующие моменты:
- Обработка ошибок: рекомендуется использовать блоки try-except для обработки возможных исключений при выполнении команд. Например:
- Синхронное и асинхронное выполнение: для асинхронного выполнения команд можно использовать asyncio вместе с subprocess. Это позволяет запускать команды в фоновом режиме без блокировки основного потока выполнения программы.
- Кроссплатформенность: учитывайте, что некоторые команды могут не работать на разных операционных системах (например, команда ls доступна в Unix-подобных системах, но не в Windows). Используйте условия или библиотеку os для определения платформы.
try:
result = subprocess.run(["ls", "-l"], check=True, capture_output=True, text=True)
print(result.stdout)
except subprocess.CalledProcessError as e:
print(f"Ошибка выполнения команды: {e}")
С учетом этих аспектов, вы сможете более эффективно и безопасно использовать внешние команды в ваших Python-программах.
Содержание статьи
Вывод Python без новой строки
По умолчанию команды Python завершаются переводом строки, который отображается как “\n”. Это поведение можно изменить, установив параметр end=””, что позволит выводить результаты следующих команд на той же строке. Пример представлен ниже.
#!/usr/bin/python3
import subprocess

