0

Windows 8 x64 システムで作業しています

サブプロセスを使用して1つの長いプログラムを実行し、実行中にプログラムの出力をフェッチして、特定の基準で実行時に分析するコードを書いています

条件を満たせばすぐにプロセスを終了させたい、プログラムではできないのでpythonからサブプロセスを終了させたい

私のコードは次のようになります

class myThread (threading.Thread):
    def __init__(self, threadI....
        ........
        .......

    def run(self):
        self.process= subprocess.Popen(cmd,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
        for line in iter(p.stdout.readline, b''):
            .........................
            ......Run-time Analysis........
            .........................
            if (criteria_met):
                  self.stop()
            .........................
            ........................
    def stop(self):
    if self.process is not None:
        self.process.terminate()
        self.process = None

しかし、私はこのようなエラーが発生します

Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Python27\lib\threading.py", line 551, in __bootstrap_inner
    self.run()
  File "VB_Extraction.py", line 57, in run
    self.process.kill()
  File "C:\Python27\lib\subprocess.py", line 1019, in terminate
    _subprocess.TerminateProcess(self._handle, 1)
WindowsError: [Error 5] Access is denied

この問題の原因は何ですか? 完了する前にプロセスを終了するにはどうすればよいですか?

4

1 に答える 1

0

.poll()プロセスがまだ実行されているかどうかを確認するために呼び出します。

if self.process is not None and self.process.poll() is None: # still running
    self.process.terminate() # or .kill() if it doesn't terminate it
    self.process.communicate() # close pipes, wait for completion
    self.process = None
于 2013-05-19T18:44:54.127 に答える