这可能是一个简单的操作系统问题,而不是编程问题,因此我们可能需要将其迁移到另一个社区。 p>
我犯了一个错误并遇到了一些奇怪的行为,我想了解发生了什么。
在我的python脚本中,我调用了某人编写的java程序。他们使用Logger记录一些msgs,并且我将java程序输出写入outfile。我还想将我的脚本输出重定向到另一个文件b / c我不想通过java程序中的msgs搜索。
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重定向到相同的文件名。
python script.py input output > output 2>&1
由于这次事故,我遇到了这种奇怪的行为。似乎重定向的stdout和stderr被写在文件的开头"输出"而不是结束,从而覆盖java程序中任何现有的msgs
我只是好奇为什么会这样。我猜测python脚本的文件指针继续向前移动,因为java程序一直在写log msgs但操作系统重定向的文件指针没有移动b / c它没有知道任何东西正在由脚本编写,因此,当重定向转向时,它会写入它认为文件末尾的位置。它是否正确?希望有人可以在这种情况下启发我。感谢。
P.S。我写了命令"正确"并且java程序输出确实转到一个文件,重定向确实转到另一个文件
更新: 感谢所有的意见和评论/答案。我想我没有正确说出我的问题所以我可能会删除这个问题。我不认为这是一个重复的问题。这不是关于将stdout和stderr附加或写入同一文件的问题。我知道该怎么做。这是一个问题,有两件事情试图写入同一个文件,但输出混淆了。我猜测发生了什么,把它放在我原来的帖子中,但似乎我写的并不清楚。
答案 0 :(得分:3)
在bash中:
>
将覆盖文件
>>
将附加到文件