2012-02-28 25 views
1

申し訳ありませんが、残念ながら、私はそれを見つけていません。私はバックグラウンドプロセスを生成し、それが完了したかどうかを監視するPythonスクリプトを書こうとしています。 os.systemコマンドを見ましたが、現在はsubprocess.callを使用することをお勧めしますが、プロセスが完了するまでプログラムをブロックするようです。Pythonのサブプロセスの使用に

私の最終目標は、次のを持っていることです。プログラムを通じて

1)プログラムが実行され、

2情報を歌いprocessessing開始)途中、それは同時に

を実行する必要がありますWindowsのDOSプログラムを起動します

3)プログラムは引き続き実行され、データを処理し続けます。

4)プログラムは、DOSプログラムを監視し、それが終了した後、最終的に情報を送信するとき。しかし、このステップを実行するには、DOSプログラムが終了していなければなりません。

誰かが正しい方向に私を指すことができればそれはすばらしいでしょう。


詳細情報:私はSecurecrtに組み込まれたpythonプロセッサを利用しようとしています。プログラムの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プログラム"はありません。 –

+0

Ignacioは申し訳ありませんが、これはWindows 7で動作するWindows DoSプログラムです。このプログラムは基本的に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ウィンドウを開いたままにしていますが).....のように... thatsちょうどtxt出力私はSecurecrtに送信しています。プロセス。正しく動作させるには、shell = Falseフラグが必要なようです。あなたのすべての協力に感謝します。 – ozymandius100

1

プロセスが実際にあなたがsubprocess.Popen.pollを使用することができますブロックせずに終了したかどうかを確認します。

関連する問題