Использование подпроцесса, чтобы узнать, когда процесс заканчивается - PullRequest
2 голосов
/ 07 июля 2010

Я хочу последовательно запустить некоторые сценарии c, которые разветвляют свои собственные процессы (в новом окне командной строки) и дать "Press any key to continue..." после их завершения. Технически это специальный компилятор. Он всплывает с окном командной строки и сообщает мне, была ли успешной компиляция или нет. Но это окно командной строки вызывает новые процессы для компиляции, которые возвращают 0, прежде чем это должно ..

Моя первая попытка была

    process = subprocess.Popen(cmd)
    process.wait()

при переборе каждого файла. К сожалению, это не ждет "Нажмите любую клавишу, чтобы продолжить ..." и взрывается мне в лицо. Кажется, что вызов wait() проходит, когда завершен внутренний процесс (к которому у меня нет доступа).

Как я могу вместо этого подождать "Нажмите любую клавишу, чтобы продолжить ..."? Он также печатает некоторую другую информацию, прежде чем нажать любую клавишу для продолжения строки.

В настоящее время мой код:

            process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE)
            completed = False
            while not completed:
                if process.poll() is not None:
                    completed = True

            print "communicating"
            process.communicate("k")
            print "communicated"

1 Ответ

2 голосов
/ 07 июля 2010

Вы можете использовать subprocess.poll для проверки состояния без блокировки и subprocess.communicate для отправки информации в подпроцесс.

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