0

Я работаю на Windows 8 x64 системыНагрузочный подпроцесс в python2.7

Я пишу код, в котором я использую подпроцесс, чтобы выполнить одну длинной программу во время выполнения я выборка вывода программы и анализа его выполнения, для конкретных критериев

я хочу завершить процесс, как только критерии соблюдены, я не могу сделать в программе, поэтому я хочу, чтобы завершить подпроцесс из питона

мой код выглядит примерно так

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 

, что причина этой проблемы? Как я могу завершить процесс до завершения?

+0

должен быть 'break' в' если criteria_met: 'блок. – jfs

ответ

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 
Смежные вопросы