Есть много разных способов запуска внешних команд в Python,
и все они имеют свои плюсы и минусы.
Мои коллеги и я пишем инструменты системного администрирования Python, поэтому нам нужно запускать множество внешних команд, а иногда вы хотите, чтобы они блокировались или выполнялись асинхронно, по таймауту, обновлялись каждую секунду и т. Д.
Существуют также разные способы обработки кода возврата и ошибок,
и, возможно, вы захотите проанализировать вывод и предоставить новый ввод (в стиле ожидайте ). Или вам нужно будет перенаправить stdin, stdout и stderr для запуска в другом tty (например, при использовании screen).
Так что вам, вероятно, придется написать много оберток вокруг внешней команды. Итак, вот модуль Python, который мы написали, который может обрабатывать
почти все, что вы хотели бы, и если нет, то оно очень гибкое, так что вы можете легко расширить его:
https://github.com/hpcugent/vsc-base/blob/master/lib/vsc/utils/run.py