3

STDOUTを既存の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+'の読み取りと書き込みのためにファイルを開いています。'r+'の代わりに'a'追加モードを使用します。

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