1

この質問が100回前に行われたことがある場合は申し訳ありませんが、残念ながら、そうであった場合は見つかりませんでした。バックグラウンドプロセスを生成し、それが完了したかどうかを監視するPythonスクリプトを作成しようとしています。subprocess.callを利用することが推奨されているos.systemコマンドを見ましたが、これはプロセスが完了するまでプログラムをブロックしているようです。

私の最終目標は、次のことです。

1)プログラムが実行され、歌唱情報の処理が開始されます

2)プログラムの途中で、同時に実行する必要があるWindowsDOSプログラムを起動します。

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: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 ()
4

2 に答える 2

1

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

于 2012-02-28T00:48:12.040 に答える
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
于 2012-02-28T01:06:31.770 に答える