使用subprocess.call时,输出就是预期的结果。
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]
并打印结果,我得到空白或其他stderr =“无”。
为什么他们不一样?我正在尝试Popen即使通话正在工作的原因是因为:Python subprocess.call on sfxcl.exe not working from Windows 2003 Task Scheduler< - 以为我会试一试......
答案 0 :(得分:10)
subprocess.Popen
返回Popen object,您可以使用该{{3}}与流程进行通信并获取输出,但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()