我想将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)
感谢大家阅读我的帖子。
答案 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