windows python stdout和stderr到两个不同的文件

时间:2016-08-19 04:49:59

标签: python windows cmd

我想将stdout和stderr输出到两个不同的日志文件。 我尝试过这段代码,但它只将错误输出到错误日志,但输出没有重定向到runtime.log文件。

代码正在Windows上运行,并且代码中大部分是robocopy。

saveerr = sys.stderr 
fsock = open('error.log', 'a') 
sys.stderr = fsock

saveout = sys.stdout
fsock1 = open('runtime.log', 'a') 
sys.stdout = fsock1

sys.stdout区域无效。请让我知道此代码中的任何更正。

这是我的整个代码

import sys

saveerr = sys.stderr 
fsock = open('error.log', 'a') 
sys.stderr = fsock

saveout = sys.stdout
fsock1 = open('runtime.log', 'a') 
sys.stdout = fsock1

##For site  AUCB-NET-01   from source folder AUDC-RSTOR-01  E:\Canberra
exit_code1 = subprocess.call('robocopy \\\\aucb-net-01\\d$ \\\\nasaudc01\\remote_site_sync\\aucb-net-01  /E /MIR /W:2 /R:1', shell=True)
print ("exitcoode1=", exit_code1)
感谢大家阅读我的帖子。

1 个答案:

答案 0 :(得分:3)

正如我在评论中所提到的,您的代码应该将您的标准输出转移到该文件中。要让robocopy的标准输出去那里,只需将每条线回显到你的标准输出,如此链接所示

https://stackoverflow.com/a/28319191/6550457

from subprocess import Popen, PIPE
import sys

saveerr = sys.stderr 
fsock = open('error.log', 'a') 
sys.stderr = fsock

saveout = sys.stdout
fsock1 = open('runtime.log', 'a') 
sys.stdout = fsock1

cmd = 'robocopy \\\\aucb-net-01\\d$ \\\\nasaudc01\\remote_site_sync\\aucb-net-01  /E /MIR /W:2 /R:1'
p = Popen(cmd, stdout=sys.stdout, stderror=sys.stderr, bufsize=1, universal_newlines=True)
exit_code1 = p.wait()

请参阅@eryksuns关于机器人副本及其退出代码的评论。 http://ss64.com/nt/robocopy-exit.html