Я использовал это в качестве ссылки, но не в состоянии выполнить то, что мне нужно: Calling an external command in PythonАсинхронные фоновые процессы в Python?
Я также читал это: http://www.python.org/dev/peps/pep-3145/
Для нашего проекта, мы имеем 5 Svn извлечений, которые необходимо обновить прежде чем мы сможем развернуть наше приложение. В среде моего разработчика, где быстрое развертывание является более важным для производительности, чем производственное развертывание, я работал над ускорением процесса.
У меня есть сценарий bash, который работает прилично, но имеет некоторые ограничения. Я запущу несколько «СВН обновлений» с помощью следующей команды Баша:
(svn update /repo1) & (svn update /repo2) & (svn update /repo3) &
Они все работаю параллельно, и она работает очень хорошо. Я также использую этот шаблон в остальной части сценария сборки для того, чтобы уволить каждую муравейную сборку, а затем переместить войны в Tomcat.
Однако у меня нет контроля над остановкой развертывания, если одно из обновлений или сборка завершается с ошибкой.
Я переписываю свой сценарий bash с Python, поэтому у меня больше контроля над ветвями и процессом развертывания.
Я использую subprocess.call(), чтобы скрыть команды 'svn update/repo', но каждый из них действует последовательно. Я пытаюсь (svn update/repo) & ', и все они срабатывают, но результат возвращается немедленно. Поэтому у меня нет способа определить, не работает ли конкретная команда или нет в асинхронном режиме.
import subprocess
subprocess.call('svn update /repo1', shell=True)
subprocess.call('svn update /repo2', shell=True)
subprocess.call('svn update /repo3', shell=True)
Я хотел бы найти способ, чтобы Python выпалить каждую команду Unix, и если какие-либо из вызовов не может в любое время всего скрипт останавливается.
Это именно то, что я искал. – Geuis
Спасибо, он работает. Есть ли способ запустить подпроцесс в фоновом режиме - теперь отображается в терминале? (в настоящее время я вижу открытую оболочку с рабочей командой) –