Вызов внешней команды в Python
Простой способ вызова внешней команды - использование os.system(...)
. И эта функция возвращает значение выхода команды. Но недостаток в том, что мы не получим stdout и stderr.
ret = os.system('some_cmd.sh')
if ret != 0 :
print 'some_cmd.sh execution returned failure'
Вызов внешней команды в Python в фоновом режиме
subprocess.Popen
обеспечивает большую гибкость для запуска внешней команды вместо использования os.system
. Мы можем запустить команду в фоновом режиме и дождаться ее завершения. И после этого мы можем получить stdout и stderr.
proc = subprocess.Popen(["./some_cmd.sh"], stdout=subprocess.PIPE)
print 'waiting for ' + str(proc.pid)
proc.wait()
print 'some_cmd.sh execution finished'
(out, err) = proc.communicate()
print 'some_cmd.sh output : ' + out
Вызов длительной внешней команды в Python в фоновом режиме и остановка через некоторое время
Мы даже можем запустить длительный процесс в фоновом режиме, используя subprocess.Popen
, и убить его через некоторое время после выполнения задачи.
proc = subprocess.Popen(["./some_long_run_cmd.sh"], stdout=subprocess.PIPE)
# Do something else
# Now some_long_run_cmd.sh exeuction is no longer needed, so kill it
os.system('kill -15 ' + str(proc.pid))
print 'Output : ' proc.communicate()[0]