gpt4 book ai didi

python - Python 中的输出文件重定向

转载 作者:太空狗 更新时间:2023-10-30 00:12:19 25 4
gpt4 key购买 nike

我正在编写一个备份脚本,打算每晚在 cronjob 中执行。

该脚本将 sys.stdout 和 sys.stderr 设置为一个输出文件,以记录发生的事情。

我使用以下代码进行备份

cmd = 'rsync -av --del --stats --filter "- .thumbnails/" ' + \
'--filter "- *~" --filter "- *.iso" --filter "- lost+found/" ' + \
'--filter "- .cache/" --filter "- tmp/" --filter "- *.mp3" ' + \
'--filter "- *.log" ' + srcDir + ' ' + dstDir

print "Executing '"+cmd+"' ..."
try:
sys.stdout.flush()
sys.stderr.flush()
retcode = subprocess.call( cmd, stdin = sys.stdin, stdout = sys.stdout,
stderr=sys.stderr, shell=False )
if retcode < 0:
print >>sys.stderr, "Command was terminated by signal", -retcode
elif retcode > 0:
print >>sys.stderr, "Command returned code ", retcode
except OSError, e:
print >>sys.stderr, "Execution failed:", e

我在子进程调用前后添加打印语句。问题是我在调用之前的打印指令的任何输出之前得到了子进程调用的输出。我添加了 flush() 调用,但它没有效果。

为什么会发生这种情况,我该如何改变这种行为?

最佳答案

我刚刚找到解决方案 here在 Stackoverflow 的回答中。

替换

sys.stderr = sys.stdout = logFile = open( tmpLogFileName, 'a' )

sys.stderr = sys.stdout = logFile = open( tmpLogFileName, 'a', 0 )

这告诉 python 不要将任何输出缓冲区分配给文件。

关于python - Python 中的输出文件重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1654875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com