你如何让subprocess.call()有多个stdout输出?

时间:2014-10-05 21:00:56

标签: python subprocess

我有

subprocess.call(['errcalc', os.path.join(current_out_dir,
                'drclog')], stdout=error_summary)
subprocess.call(['errcalc', os.path.join(current_out_dir,
                'drclog')], stdout=full_error_summary)

我可以将subprocess.call()输出到多个stdout而不是两次运行命令吗?也许是subprocess.call(['errcalc', os.path.join(current_out_dir, 'drclog')], stdout=[error_summary, full_error_summary])或其他什么?

解决方案

subprocess.call(['errcalc', os.path.join(current_out_dir,
                'drclog')], stdout=logfile)
for line in logfile:
    error_summary.write(line)
    full_error_summary.write(line)

2 个答案:

答案 0 :(得分:2)

进程具有单个标准输出设备。您不能将多个设备连接到标准输出。

您可以做的是选择一个标准输出设备并附加它。完成此过程后,将输出复制到其他设备。或者,创建一个多路复用输出的设备。创建一个设备,该设备引用了您最终希望接收输出的两个设备。当您连接的输出设备收到输出时,它会将其传递给其他两个设备。

答案 1 :(得分:1)

您可以将输出通过管道输出到tee命令,该命令会将输出拆分为文件,然后再转换为另一个标准输出。