Python subprocess.call和subprocess.Popen输出不同
当使用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显示为"None"。
为什么会有这样的区别呢?我尝试使用Popen,即使call可以正常工作,原因是这个链接中的内容:Python subprocess.call在Windows 2003任务调度器中对sfxcl.exe不起作用 <- 我想试试看...
1 个回答
11
subprocess.Popen
会返回一个 Popen 对象,你可以用这个对象和正在运行的程序进行交流,还能获取它的输出。不过,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()