использование подпроцесса python - PullRequest
1 голос
/ 28 февраля 2012

Извините, если этот вопрос задавался 100 раз, к сожалению, я не нашел его, если бы он был.Я ищу написать скрипт на Python, который будет вызывать фоновый процесс и следить за его завершением.Я видел команду os.system, которая сейчас рекомендуется использовать subprocess.call, но, похоже, это блокирует программу до завершения процесса.

Моя конечная цель - получить следующее:

1) Программа запускается и начинает обрабатывать информацию о пении

2) В середине программы запускается программа Windows DOS, которая должна будет выполняться одновременно

3) Программа продолжает работать и продолжает обработкуданные.

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

Если бы кто-то мог указать мне правильное направление, это было бы здорово.


Дополнительная информация: Я пытаюсьиспользовать процессор Python, встроенный в Securecrt.Похоже, что он прекрасно открывает окно CMD для программы, но не выводит никаких промежуточных команд (только enable в этом примере), пока я не уничтожу подпроцесс.

import os

import subprocess


def Main()

    crt.Screen.Synchronous = True

    VMCOMMAND = '\"C:\\Program Files\\VMWare\\VMware OVF Tool\\ovftool.exe\" ' + '--name=test' + ' C:\\temp\\test.ova' + ' vi://root:test@1.1.1.1'

    from subprocess import Popen


    p = Popen(VMCOMMAND)

    crt.Screen.Send(chr(13))
    crt.Screen.Send("enable" + chr(13))
    crt.Screen.Send("enable" + chr(13))
    crt.Screen.Send("enable" + chr(13))
    crt.Screen.Send("enable" + chr(13))


    returncode = p.wait()

    crt.Screen.Send("should not see enable" + chr(13))

Main ()

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

Использование Popen конструктор:

from subprocess import Popen

# start program
p = Popen(["program.exe", "arg1"])
# do other stuff here
# ...
# at the end wait for the program to exit
returncode = p.wait()
# run final step here
1 голос
/ 28 февраля 2012

Чтобы проверить, завершился ли процесс без фактической блокировки, вы можете использовать subprocess.Popen.poll.

...