2012-05-23 50 views
3

我想要的subprocess.call()STDOUT追加到現有文件。我下面的代碼覆蓋文件 -蟒子被覆蓋用於標準輸出文件 - 我需要它附加到文件(Windows)

log_file = open(log_file_path, 'r+') 
cmd = r'echo "some info for the log file"' 
subprocess.call(cmd, shell=True, stdout=log_file, stderr=STDOUT) 
log_file.close() 

我要找的>>subprocess.call()subprocess.Popen()等同。它的駕駛我瘋狂試圖找到它..

UPDATE:

繼答案爲止我已經更新了我的代碼

import subprocess 

log_file = open('test_log_file.log', 'a+') 
cmd = r'echo "some info for the log file\n"' 
subprocess.call(cmd, shell=True, stdout=log_file, stderr=subprocess.STDOUT) 
log_file.close() 

我運行在命令行這個代碼窗戶 -

C:\users\aidan>test_subprocess.py 

這增加了文本的日誌文件。當我再次運行腳本時,沒有新增任何內容。它似乎仍然覆蓋文件..

回答

7

使用的「a」,而不是追加方式:

log_file = open(log_file_path, 'a+') 

如果仍然看到覆蓋前面的內容,也許Windows需要你明確地尋求的結束文件;打開爲'r +'或'w'並尋找到文件結尾:

import os 

log_file = open(log_file_path, 'r+') 
log_file.seek(0, os.SEEK_END) 
+0

感謝您的輸入 - 這是有道理的,但不知何故,它仍然失敗(我已經更新了我的問題有一個完整的腳本)。 –

+0

我已經更新了我的答案,包括一個端到端的替代方法來打開文件進行追加。 –

+0

就這樣做了。再次感謝Martijn。 –

4

修改如何打開log_file_path。您正在打開閱讀和書寫'r +'的文件。使用「A」追加方式,而不是「R +」:

log_file = open(log_file_path, 'a+')