Home

Tags

Запуск программ из Python

2010-02-18 python subprocess

Запуск программы и получение возвращаемого текста


Получение текста по мере его появления:
cmd = 'ping google.com -c 3'
import subprocess
PIPE = subprocess.PIPE
p = subprocess.Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE,
        stderr=subprocess.STDOUT, close_fds=True)
while True:
    s = p.stdout.readline()
    if not s: break
    print s,

Получение всего результата после завершения программы:
cmd = 'pwd'
import subprocess
PIPE = subprocess.PIPE
p = subprocess.Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE,
        stderr=subprocess.STDOUT, close_fds=True, cwd='/home/')
print p.stdout.read()

Параметр cwd задает текущую папку для нового процесса.
Если вы запускаете приложение при подключенных сокетах и не хотите что-б они передавались в дочерний процесс то нужно указать флаг close_fds = True

Запуск программы без ожидания её завершения

import subprocess
cmd = 'ping google.com'
subprocess.Popen(cmd, shell = True)

Полезные методы работы с процессом

p = subprocess.Popen(cmd, shell = True)
p.poll() # проверяет завершился ли процесс, если процесс ещё работает, то poll() == None, иначе вернет код завершения
p.wait() # ожидает завершения процесса ( блокирующая функция )


см. Убить дерево процессов