Асинхронное выполнение команд оболочки в Python: изучение альтернативных подходов
Асинхронный запуск внешних команд из сценариев Python — ценный метод, позволяющий непрерывно выполнять сценарии пока внешние команды выполняют свои задачи. В этой статье рассматриваются подходящие методы достижения такого асинхронного поведения с упором на использование os.system() и subprocess.Popen.
os.system() и символа амперсанда
Использование os.system() с амперсандом (&) в конце команды действительно может создать отдельный процесс, который выполняется асинхронно. Однако этот метод имеет ограничения и не считается рекомендуемым подходом для асинхронного выполнения.
subprocess.Popen — превосходная альтернатива
Для надежного асинхронного выполнения команд используйте подпроцесс. Popen является предпочтительным выбором. Он обеспечивает широкий диапазон контроля над дочерним процессом, позволяя:
• Create asynchronous processes with Popen() • Perform tasks concurrently while the child process is active • Terminate the process with terminate() • Query its running status with poll() • Communicate with it using stdin and stdout
Пример использования subprocess.Popen
from subprocess import Popen p = Popen(['watch', 'ls']) # Replace with your command # Other code can run here while the command is executing p.terminate() # Stop the process when necessary
Заключение
Хотя os.system() может предложить базовый уровень асинхронного выполнения, subprocess.Popen предоставляет более надежное и гибкое решение для контроля и взаимодействия с дочерними процессами. Его универсальность и простота использования делают его рекомендуемым методом асинхронного выполнения команд оболочки в Python.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3