2011-08-03 140 views
4

當使用subprocess.call時,輸出是預期的。Python subprocess.call和subprocess.Popen給我不同的輸出

result = subprocess.call([securefx, '/NoPrompt', '/Q', '/RetryCount', retries, 
       '/RetryDelay', '1', '/Log', sfxLogFile, '/List', '/S', session]) 

打印結果將輸出類似 -533428或0

但是當我運行

args = [securefx, '/NoPrompt', '/Q', '/RetryCount', retries, '/RetryDelay', '1', 
     '/Log', sfxLogFile, '/List', '/S', session] 
process = subprocess.Popen(args, stdout=subprocess.PIPE) 
result = process.communicate()[0] 

打印出結果,我得到的空白或其他標準錯誤= 「無」。

他們爲什麼不同?我想,即使調用工作POPEN的原因是因爲這一點:Python subprocess.call on sfxcl.exe not working from Windows 2003 Task Scheduler < - 想我給它一個去...

回答

10

subprocess.Popen返回Popen object,您可以使用與進程通信和得到輸出,但是subprocess.call將只返回代碼的過程:

 
subprocess.call(*popenargs, **kwargs) 
    Run command with arguments. Wait for command to complete, then return the returncode attribute. 

所以subprocess.call基本上等同於下面的代碼,而只存在於方便:

def call(*popenargs, **kwargs): 
    p = subprocess.Popen(*popenargs, **kwargs) 
    return p.wait() 
+0

我找到了! process.wait()會給我相同的返回碼。 :) – kouri

相關問題