3

我想将STDOUTof附加subprocess.call()到现有文件中。我下面的代码覆盖了文件 -

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()

我正在寻找>>insubprocess.call()或的等价物subprocess.Popen()。试图找到它让我发疯..

更新:

按照到目前为止的答案,我已将代码更新为

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()

我正在从 Windows 的命令行运行此代码 -

C:\users\aidan>test_subprocess.py

这会将文本添加到日志文件中。当我再次运行脚本时,没有添加任何新内容。它似乎仍然在覆盖文件..

4

2 回答 2

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)
于 2012-05-23T15:09:05.980 回答
4

修改打开 log_file_path 的方式。您正在打开文件以读取和写入“r+”。使用 'a' 附加模式而不是 'r+':

log_file = open(log_file_path, 'a+')
于 2012-05-23T15:09:22.343 回答