将输出重定向到python中的两个文件

时间:2017-04-03 11:41:00

标签: python redirect fabric

我正在编写代码,我希望在python中重定向输出两个不同的文件

一个用于记录目的,另一个用于创建结构代码。

以下是将输出重定向到两个不同文件的代码:

import sys
print('###################################Creating storage commands         Variables##########################')
storage_file = open("Storage-output.txt", 'w')
sys.stdout = storage_file
print ('network port show')
print ('Storage Commands are completed')
storage_file.close()
sys.stdout = sys.__stdout__  

# write fabric code
fabric_file = open("Fabric_code.py", 'w')
print"from fabric.api import run"
print"def host_type():"
print"    run('rows 0', shell=False)"
print"    run('networ port show', shell=false)"
fabric_file.close()
sys.stdout = sys.__stdout__
storage_file = open("Storage-output.txt", 'a')
sys.stdout = storage_file
print('###############Genarating aggregate command#############')
print ('storage aggregate create -aggregate aggr_fab -diskcount 6 -raidtype    raid_dp", shell=False')
storage_file.close()
sys.stdout = sys.__stdout__  
# write fabric code
fabric_file = open("Fabric_code.py", 'a')
print"   run('storage aggregate create -aggregate aggr_fab -diskcount 6 -  raidtype raid_dp', shell=False) "
fabric_file.close()
sys.stdout = sys.__stdout__

在上面的代码中,为日志文件Storage_file创建一个用于存储此文件的记录,使用Fabric_code文件来创建结构代码。

我的代码生成1000条命令,我不想在python代码中反复打开和关闭两个不同文件。

而不是这个有任何解决方案,我可以将打印输出重定向到两个直接文件,而无需打开和关闭

1 个答案:

答案 0 :(得分:0)

您应该通过在开头打开文件一次来重构代码,然后编写文件并最终关闭文件。从上面的例子我们可以做到以下几点:

import sys

# Open files
storage_file = open("Storage-output.txt", 'w')
fabric_file = open("Fabric_code.py", 'w')

# ===================
# Write Block
# ===================
print('###################################Creating storage commands         Variables##########################')
sys.stdout = storage_file
print ('network port show')
print ('Storage Commands are completed')
sys.stdout = sys.__stdout__  

# write fabric code
print"from fabric.api import run"
print"def host_type():"
print"    run('rows 0', shell=False)"
print"    run('networ port show', shell=false)"
sys.stdout = sys.__stdout__
sys.stdout = storage_file
print('###############Genarating aggregate command#############')
print ('storage aggregate create -aggregate aggr_fab -diskcount 6 -raidtype    raid_dp", shell=False')
sys.stdout = sys.__stdout__  
# write fabric code
print"   run('storage aggregate create -aggregate aggr_fab -diskcount 6 -  raidtype raid_dp', shell=False) "
sys.stdout = sys.__stdout__

# closing files
storage_file.close()
fabric_file.close()