2012-02-28 2 views
1

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

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

1) прогонов программы и начинает processessing петь информация

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

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

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

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


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

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:[email protected]' 

    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() 
+3

"программа для Windows DOS"? Программы предназначены для DOS или для Windows, нет такой вещи, как «Windows DOS program». –

+0

Извините Ignacio, это Windows DoS-программа, работающая под Windows 7. Программа в основном представляет собой строку cmd для ovftool. – ozymandius100

+0

OVFTool не для DoS, это для виртуализации. –

ответ

1

Использование 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 
+0

Спасибо. Пробовал это, и это не сработало. Я обновил свой оригинальный товар с дополнительной информацией. Я не упомянул, что я пытаюсь использовать интерпретатор SecureCRT Python. – ozymandius100

+0

@ ozymandius100: Работает ли он, если вы запускаете какую-либо другую программу, например, 'notepad.exe'? Вы пытаетесь отправить '' enable \ r'' на 'ovftool.exe'? – jfs

+0

Интересно .... Я сделал это, просто запустив «notepad.exe», и это работало без инцидентов. Когда я запускаю ovatool.exe, он не делает (хотя ovatool держит cmd-окно открытым) ..... что касается enable ... thats just txt output, я отправляю на Securecrt. обработать. Похоже, мне нужен флаг shell = False, чтобы он работал правильно. Спасибо за вашу помощь. – ozymandius100

1

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

Смежные вопросы