Why is writing to a file from my python script getting overwritten
本问题已经有最佳答案,请猛点这里访问。
这可能是一个简单的操作系统问题,而不是编程问题,因此我们可能需要将其迁移到另一个社区。
我犯了一个错误,遇到了一些奇怪的行为,我想了解发生了什么。
在我的python脚本中,我调用了某人编写的java程序。他们使用Logger记录一些msgs,我正在将java程序输出写入outfile。我还想将我的脚本输出重定向到另一个文件b / c我不想通过java程序搜索msgs的海洋。
1 2 3 4 5 6 7 8 9 10 11 12 | out = sys.argv[2] ... ... with open(out, 'w') as outfile: # call some java programs via Popen but log # some msgs after all the java programs have run cmd = ["java","-cp","blah.jar","com.main.blah","param1","param2"] proc = subprocess.Popen(cmd, stdout=outfile) proc.wait() .... .... print"got here to test where this msg gets written" |
运行我的脚本时,我意外地将stdout和stderr重定向到相同的文件名。
1 | python script.py input output > output 2>&1 |
由于这次事故,我偶然发现了这种奇怪的行为。似乎重定向的stdout和stderr被写入文件"output"的开头而不是结尾,从而覆盖了java程序中任何现有的msgs
我只是好奇为什么会这样。我猜测python脚本的文件指针继续前进,因为java程序一直在写日志msgs但操作系统重定向的文件指针没有移动b / c它不知道脚本正在写什么因此,当重定向转向时,它会写入它认为是文件末尾的位置。它是否正确?希望有人可以在这种情况下启发我。谢谢。
附:我写了命令"正确",java程序输出确实转到一个文件,重定向确实转到另一个文件
更新:
感谢所有的意见和评论/答案。我想我没有正确说出我的问题所以我可能会删除这个问题。我不认为这是一个重复的问题。这不是关于将stdout和stderr附加或写入同一文件的问题。我知道该怎么做。这是一个问题,有两件事情试图写入同一个文件,但输出混淆了。我猜测发生了什么,把它放在我原来的帖子中,但似乎我写的不清楚。
在bash中: