2013-10-10 3 views
-3

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

popen3 = popen2.Popen3(cmd, capturestderr=True)  
rc = popen3.wait() 
if os.WIFEXITED(rc): 
    rc = os.WEXITSTATUS(rc) 
     if rc < 0: 
      #""" Needed to make sure that catastrophic errors are not processed here, hence the rc check. 
      #"""            
      if len(stderr) > 0: 
       inserts= [] 
       inserts.append("Warnings occurred during run of %s" % self.__MODULE_NAME) 
       inserts.append("Check conversion parameters.") 
       #self.msgWrite("98000001", inserts) 

     if rc == 0: 
    self.msgDebug("CompartService exited normally", "Exit code with signal: %s" % str(rc)) 
    # 

ответ

3

Простой,

import subprocess 

# the process 
proc = subprocess.Popen(cmd, stderr=subprocess.PIPE, stdout=subprocess.PIPE) 

# getting different parts of it. 
stdout = proc.stdout.read() 
stderr = proc.stderr.read() 
rc = proc.wait() 

В частности, что ваш код выглядит как сейчас:

from subprocess import Popen, PIPE 

proc = Popen(cmd, stderr=PIPE) 
rc = proc.wait() 
# the rest of your code 
+0

Ваш пример тупиковой ситуации, если существует значительный трафик на STDERR. Вместо этого следует использовать popen.communicate(). – tdelaney

+0

Это правда, но ОП даже не использует его. Я просто демонстрировал subprocess.Popen. –

+0

Но вы демонстрируете неправильное использование. Это взаимоблокировки, независимо от того, использует ли он его. Просто измените это, чтобы общаться, и мы все счастливы домой. – tdelaney

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