2013-10-10 45 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

你的榜樣會死鎖。應該使用Popen.communicate()。 – tdelaney

+0

這是真的,但OP甚至沒有使用它。我只是在展示subprocess.Popen。 –

+0

但是你正在演示不正確的用法。無論OP是否使用它,它都會死鎖。只要改變它溝通,我們都快樂地回家。 – tdelaney