определение, если процесс успешно завершен - PullRequest
2 голосов
/ 21 июня 2010

У меня есть код для выполнения команды оболочки Unix в фоновом режиме в Python

 import subprocess
 process = subprocess.Popen('find / > tmp.txt &',shell=True)

Мне нужно запечатлеть сценарий, в котором я узнаю, что процесс завершился успешно завершение

Пожалуйста, объясните с примером кода

Tazim

Ответы [ 2 ]

3 голосов
/ 21 июня 2010

Нет необходимости в &: команда запускается в отдельном процессе и выполняется независимо.

Если вы хотите дождаться завершения процесса, используйте wait():

process = subprocess.Popen('find / > tmp.txt', shell = True)
exitcode = process.wait()
if exitcode == 0:
    # successful completion
else:
    # error happened

Если ваша программа может сделать что-то значимое за это время, вы можете использовать poll(), чтобы определить, завершился ли процесс.

Кроме того, вместо записи выходных данных во временный файл и последующего чтения из вашей программы на Python, вы можете напрямую читать из канала. Подробнее см. Документацию subprocess .

2 голосов
/ 22 июня 2010

Не используйте shell = True.Это вредно для вашего здоровья.

proc = subprocess.Popen(['find', '/'], stdout=open('tmp.txt', 'w'))
if proc.wait() == 0:
  pass

Если вам действительно нужен файл, используйте import tempfile вместо жестко заданного временного имени файла.Если вам не нужен файл, используйте конвейер (см. Документацию по подпроцессам, как предлагает Томас).

Также не пишите сценарии оболочки на Python.Вместо этого используйте функцию os.walk.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...