windows python标准输出和标准输出到两个不同的文件

windows python标准输出和标准输出到两个不同的文件,python,windows,cmd,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.std

我想将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)

谢谢大家阅读我的帖子

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



请参阅@eryksuns关于机器人复制及其退出代码的评论

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



请参阅@eryksuns关于机器人复制及其退出代码的评论

你是如何推出机器人技术的?(为什么这个标签是'PowerShell'?)这应该将您的stdout转移到runtime.log。如果您要启动robocopy,那么您需要将其标准输出转移到文件中。发布你用来启动Robocopy的代码你是如何启动Robocopy的?(为什么这个标签是'PowerShell'?)这应该将您的stdout转移到runtime.log。如果您要启动robocopy,那么您需要将其标准输出转移到文件中。发布你用来启动robocopy的代码我想在同一个脚本中做六个robocopy,我怎么做。。。。。上述脚本是否适用于所有六个robocopy命令……是的,可以。您可以将最后4行复制6次,也可以创建一个cmd值数组并对其进行迭代。如果这解决了您的问题,请将答案勾选为已接受。传递参数
stdout=sys.stdout
stderr=sys.stderr
会更简单,然后检查
p.wait()
以了解更多信息。中间管道和文本解码并不是真正必要的。许多程序使用通用的0表示成功,任何其他值都是错误代码,但robocopy使用信息代码。因此,例如,
subprocess.check\u call
认为robocopy在实际成功时失败了。我认为这是值得注意的,所以你能包括退出代码的链接吗?我想在同一个脚本中做六个机器人复制,我怎么能这样做。。。。。上述脚本是否适用于所有六个robocopy命令……是的,可以。您可以将最后4行复制6次,也可以创建一个cmd值数组并对其进行迭代。如果这解决了您的问题,请将答案勾选为已接受。传递参数
stdout=sys.stdout
stderr=sys.stderr
会更简单,然后检查
p.wait()
以了解更多信息。中间管道和文本解码并不是真正必要的。许多程序使用通用的0表示成功,任何其他值都是错误代码,但robocopy使用信息代码。因此,例如,
subprocess.check\u call
认为robocopy在实际成功时失败了。我认为这是值得注意的,所以你能包括出口代码的链接吗?
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()