Выполнение последующих команд в Python - PullRequest
1 голос
/ 04 декабря 2011

Я хотел бы иметь возможность вызывать две (или более) команды внутри Python, но я хотел бы убедиться, что первая завершена до начала второй. Это возможно с subprocess? Например:

subprocess.call("script1 input1 > out", shell=True)

и когда эта команда завершается:

subprocess.call("script2 out>out2", shell=True)

или есть лучший способ?

Ответы [ 3 ]

6 голосов
/ 04 декабря 2011

Вызов subprocess.call блокируется до завершения команды.Из документации :

дождитесь завершения команды, затем верните атрибут returncode.

Аналогичная опция, которая также ожидает завершенияsubprocess.check_call.Разница между call и check_call заключается в том, что последний вызывает исключение для ненулевого кода возврата, тогда как первый возвращает код возврата для всех случаев.

1 голос
/ 04 декабря 2011

Из документации :

Запустите команду, описанную args .Дождитесь завершения команды, затем верните атрибут returncode.

Чтобы сделать это асинхронно (чтобы вы не ожидали), вы должны использовать subprocess.Popen.

0 голосов
/ 04 декабря 2011

Вы пытаетесь воспроизвести конвейер оболочки?

Если это так, то, адаптируя пример из документации по питону , ваш пример может выглядеть так:

from subprocess import Popen, PIPE
p1 = Popen([script1, input1], stdout=PIPE)
p2 = Popen([script2], stdin=p1.stdout, stdout=PIPE)
p1.stdout.close() # Allow p1 to receive a SIGPIPE if p2 exits.
output = p2.communicate()[0]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...