這可能是一個簡單的操作系統問題,而不是編程問題,所以我們可能需要將其遷移到另一個社區。爲什麼從我的python腳本寫入文件被覆蓋
我犯了一個錯誤,遇到了一些奇怪的行爲,我想了解發生了什麼。
在我的python腳本中,我調用了一個有人寫的java程序。他們使用Logger記錄一些消息,並且正在將java程序輸出寫入outfile。我也想將我的腳本輸出重定向到另一個文件b/c我不想從java程序中搜索消息。
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程序中的所有現有信息。
我只是好奇爲什麼會發生這種情況。我猜python腳本的文件指針一直向前移動,因爲java程序一直在寫日誌消息,但是操作系統重定向的文件指針沒有移動b/c,它不知道腳本正在寫什麼,因此,當重定向輪到來時,它會寫出它認爲是文件結尾的位置。它是否正確?希望有人能夠啓發我這種情況。謝謝。
P.S.我寫了命令「正確」,Java程序輸出確實去了一個文件,並重定向到另一個文件
更新: 感謝所有的意見和評論/答案。我想我沒有正確地說出我的問題,所以我可能會刪除這個問題。我不認爲這是一個重複的問題。這不是將stdout和stderr追加或寫入同一個文件的問題。我知道該怎麼做。這是一個關於試圖寫入同一文件但輸出混合起來的兩件事情的問題。我猜測發生了什麼,並把它放在我原來的帖子中,但似乎我寫的內容並不清楚。
感謝所有的意見和評論/答案。我想我沒有正確地說出我的問題,所以我可能會刪除這個問題。我不認爲這是一個重複的問題。這不是將stdout和stderr追加或寫入同一個文件的問題。我知道該怎麼做。這是一個關於試圖寫入同一文件但輸出混合起來的兩件事情的問題。我猜測發生了什麼,並把它放在我原來的帖子中,但看起來好像我寫的不明確 – Classified