アプリケーションが数秒ごとに更新するファイルがあり、そのファイルから単一の数値フィールドを抽出し、後で使用するためにリストに記録したいと考えています。そこで、スクリプトがソース ファイルを読み取る無限ループを作成し、特定の Figure の変更に気付くたびに、その Figure を出力ファイルに書き込みたいと思います。
ソースファイルが変更されていることをPythonに認識させられない理由がわかりません:
#!/usr/bin/python
import re
from time import gmtime, strftime, sleep
def write_data(new_datapoint):
output_path = '/media/USBHDD/PythonStudy/torrent_data_collection/data_one.csv'
outfile = open(output_path, 'a')
outfile.write(new_datapoint)
outfile.close()
forever = 0
previous_data = "0"
while forever < 1:
input_path = '/var/lib/transmission-daemon/info/stats.json'
infile = open(input_path, "r")
infile.seek(0)
contents = infile.read()
uploaded_bytes = re.search('"uploaded-bytes":\s(\d+)', contents)
if uploaded_bytes:
current_time = strftime("%Y-%m-%d %X", gmtime())
current_data = uploaded_bytes.group(1)
if current_data != previous_data:
write_data(","+ current_time + "$" + uploaded_bytes.group(1))
previous_data = uploaded_bytes.group(1)
infile.close()
sleep(5)
else:
print "couldn't write" + strftime("%Y-%m-%d %X", gmtime())
infile.close()
sleep(60)
現在のように、(乱雑な) スクリプトは 1 回正しく記述され、その後、ソース ファイル (stats.json) ファイルが変更されているにもかかわらず、スクリプトが変更を検出しないことがわかります。実行し続けますが、出力ファイルが大きくなりません。
anopen()
と aでうまくいくと思い、 aclose()
を投入してみました.seek(0)
。
Python がソース ファイル (stats.json) を再度開いて再度読み取るようにするために、どのファイル メソッドが欠落していますか?