亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Ping多個ips并寫入JSON文件python

Ping多個ips并寫入JSON文件python

海綿寶寶撒 2021-11-09 19:35:45
我正在 ping LAN 中的多個 ip 以檢查它是否處于活動狀態。代碼將根據計劃每分鐘運行一次。為了 ping 多個 ip,我使用了多處理。它在多處理的幫助下做得很好。同時,我想在ping后將ping結果寫入json文件。但是寫入JSON文件時,它只寫入最后一個ip的輸出。我想要所有三個。有沒有辦法做到這一點這是示例代碼:import jsonfrom multiprocessing import Poolimport subprocessfrom datetime import datetimetimestamp = datetime.now().strftime("%B %d %Y, %H:%M:%S")hosts =  ["192.168.1.47","192.168.1.42"]count = 1wait_sec = 1n = len(hosts)def main(hosts):    p = Pool(processes= n)    result = p.map(beat, hosts)def beat(hosts):    #Name for the log file    name = 'icmp.json'    ip4write(hosts, name)def ip4write(hosts, name):    global ip4a    ip4a = hosts    ipve4(hosts, name)    write(hosts, name)def ipve4(hosts, name):    global u    status, result = subprocess.getstatusoutput("ping -c1 -w2 " + str(ip4a))    if status == 0:        print(str(ip4a) + " UP")        u = " UP"def write(hosts, name):    text_file = open(name, "a+")    with open(name) as json_file:      try:          data = json.load(json_file)      except:          data = {}      with open(name, 'w') as outfile:        data[timestamp] = {          'monitor.ip':str(hosts),          'monitor.status': u        }        print(data)        json.dump(data, outfile)        print('Data written')    text_file.close()main(hosts)JSON 文件中的輸出:{"February 15 2019, 16:38:12": {"monitor.status": " UP", "monitor.ip": "192.168.1.42"}}我需要的輸出:{"February 15 2019, 16:38:12": {"monitor.ip": "192.168.1.47", "monitor.status": " UP"}, "February 15 2019, 16:38:12": {"monitor.ip": "192.168.1.42", "monitor.status": " UP"}}
查看完整描述

2 回答

?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

要在不覆蓋現有內容的情況下繼續向現有文件添加內容,您應該以“追加”模式打開。在您的代碼中,您以“寫入”模式打開。這將打開文件進行寫入,但會覆蓋現有內容。

具體來說,您的代碼中的這一行:

with open(name, 'w') as outfile:

您應該將打開模式從 write ( 'w')更改為 append ( 'a')。

with open(name, 'a') as outfile:

如果這能解決您的問題,請告訴我。


查看完整回答
反對 回復 2021-11-09
?
萬千封印

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)


查看完整回答
反對 回復 2021-11-09
  • 2 回答
  • 0 關注
  • 227 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號