«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как реализовать асинхронное выполнение команд оболочки в Python?

Как реализовать асинхронное выполнение команд оболочки в Python?

Опубликовано 23 ноября 2024 г.
Просматривать:625

How to Implement Asynchronous Shell Command Execution in Python?

Асинхронное выполнение команд оболочки в 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() для обмена данными через стандартный ввод и ожидания завершения процесса.

Заявление о выпуске Эта статья перепечатана по адресу: 1729581855. В случае каких-либо нарушений, пожалуйста, свяжитесь с [email protected], чтобы удалить ее.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3