Асинхронное выполнение команд оболочки в Python
Чтобы облегчить асинхронное выполнение команд внешней оболочки в сценарии Python, можно рассмотреть возможность использования os .системная функция(). Однако этот подход предполагает использование символа & в конце команды, чтобы избежать синхронного поведения. Как следствие, это вызывает обеспокоенность по поводу его пригодности как подходящего метода для достижения асинхронного выполнения.
Подпроцесс: превосходное решение
Вместо os.system(), Модуль подпроцесса предлагает более подходящее решение в виде класса Popen. Этот класс обеспечивает плавное асинхронное выполнение длительных команд, позволяя сценарию Python продолжать свою работу, пока внешняя команда выполняет свои задачи.
Реализация
Для иллюстрации использования Popen, рассмотрим следующий пример:
from subprocess import Popen
# Initiate the long-running 'watch ls' command
p = Popen(['watch', 'ls'])
# Continue executing the Python script while the command runs
# ...
# Terminate the subprocess when necessary
p.terminate()
Дополнительные возможности
Помимо асинхронного выполнения, экземпляр Popen предлагает несколько других возможностей. Примечательно, что он позволяет отслеживать статус выполнения с помощью метода poll(). Кроме того, можно использовать метод communication() для обмена данными через стандартный ввод и ожидания завершения процесса.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3