2 回答

TA貢獻1856條經驗 獲得超17個贊
要在不覆蓋現有內容的情況下繼續向現有文件添加內容,您應該以“追加”模式打開。在您的代碼中,您以“寫入”模式打開。這將打開文件進行寫入,但會覆蓋現有內容。
具體來說,您的代碼中的這一行:
with open(name, 'w') as outfile:
您應該將打開模式從 write ( 'w'
)更改為 append ( 'a'
)。
with open(name, 'a') as outfile:
如果這能解決您的問題,請告訴我。

TA貢獻1891條經驗 獲得超3個贊
下面是代碼的精簡版:
import os
from multiprocessing import Pool
import json
import datetime
import time
hosts = ["192.168.1.47", "8.8.8.8"]
MAX_NUMBER_OF_STATUS_CHECKS = 2
FILE_NAME = 'hosts_stats.json'
#
# counter and sleep were added in order to simulate scheduler activity
#
def ping(host):
status = os.system('ping -o -c 3 {}'.format(host))
return datetime.datetime.now().strftime("%B %d %Y, %H:%M:%S"), {"monitor.ip": host,
"monitor.status": 'UP' if status == 0 else 'DOWN'}
if __name__ == "__main__":
p = Pool(processes=len(hosts))
counter = 0
if not os.path.exists(FILE_NAME):
with open(FILE_NAME, 'w') as f:
f.write('{}')
while counter < MAX_NUMBER_OF_STATUS_CHECKS:
result = p.map(ping, hosts)
with open(FILE_NAME, 'rb+') as f:
f.seek(-1, os.SEEK_END)
f.truncate()
for entry in result:
_entry = '"{}":{},\n'.format(entry[0], json.dumps(entry[1]))
f.writelines(_entry)
f.write('}')
counter += 1
time.sleep(2)
添加回答
舉報