2011-08-03 14 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(*popenargs, **kwargs) 
    Run command with arguments. Wait for command to complete, then return the returncode attribute. 

だからsubprocess.callは基本的に以下のコードと等価であり、便宜のためだけに存在します:出力を得る、しかしsubprocess.callは唯一のプロセスのリターンコードを返します

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

私はそれを見つけた! process.wait()は私に同じ戻りコードを与えます。 :) – kouri

関連する問題