我有一个应用程序每隔几秒钟更新一次的文件,我想在该文件中提取一个数字字段,并将其记录到一个列表中以供以后使用。所以,我想创建一个无限循环,脚本读取源文件,只要它注意到特定图形的变化,它就会将该图形写入输出文件。
我不确定为什么我不能让 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)
现在,(混乱的)脚本正确写入一次,然后我可以看到虽然我的源文件(stats.json)文件正在更改,但我的脚本永远不会接受任何更改。它继续运行,但我的输出文件没有增长。
我认为 anopen()
和 aclose()
可以解决问题,然后尝试加入 a .seek(0)
。
我缺少什么文件方法来确保 python 重新打开并重新读取我的源文件(stats.json)?