Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从python解析器脚本创建Json输出_Python_Json_Ubuntu 16.04 - Fatal编程技术网

从python解析器脚本创建Json输出

从python解析器脚本创建Json输出,python,json,ubuntu-16.04,Python,Json,Ubuntu 16.04,我编写了一个python脚本,其中根据需要使用来自dkpg-l命令的perl解析了大部分输出。我试图用输出创建一个json结构的输出文件,如下所示 我对python非常陌生,所以想了解一些关于我在这里用数组结构生成这样一个json文件的最佳选项的技巧吗 Json文件 { "hostname": "xyz-abc-m001", "publicIP": "111.00.00.xxx", "privateIP": "10.xxx.xx.61", "kernal": "4.4.0-72-gen

我编写了一个python脚本,其中根据需要使用来自dkpg-l命令的perl解析了大部分输出。我试图用输出创建一个json结构的输出文件,如下所示

我对python非常陌生,所以想了解一些关于我在这里用数组结构生成这样一个json文件的最佳选项的技巧吗

Json文件

{

 "hostname": "xyz-abc-m001",
 "publicIP": "111.00.00.xxx",
 "privateIP": "10.xxx.xx.61",
 "kernal": "4.4.0-72-generic #93-Ubuntu",
 "package": [
   { "name":"nfs-common", "installed":"1:1.2.8-9ubuntu12", "available":"1:1.2.8-9ubuntu12.1" },
   { "name":"grub-common", "installed":"2.02~beta2-36ubuntu3.8", "available":"2.02~beta2-36ubuntu3.9" },
   { "name":"wget", "installed":"1.17.1-1ubuntu1.1", "available":"1.17.1-1ubuntu1.2" }

 ]

}
Python脚本

import socket
import os
import subprocess
from subprocess import Popen, PIPE


#Getting Hostname of the machine
hostname=socket.gethostname()

#Getting private IP of the machine on eth0 
f = os.popen(" ip addr show eth0 | grep -Po 'inet \K[\d.]+' ")
private_ip=f.read()

#Getting public IP of the machine on eth1 
f = os.popen(" ip addr show eth1 | grep -Po 'inet \K[\d.]+' ")
public_ip=f.read()

#Getting currently running linux kernal
f = os.popen(" uname -a | awk '{print $3, $4}' ")
running_kernal=f.read()        


pipe = Popen(" apt-get --just-print upgrade 2>&1 | perl -ne 'if (/Inst\s([\w,\-,\d,\.,~,:,\+]+)\s\[([\w,\-,\d,\.,~,:,\+]+)\]\s\(([\w,\-,\d,\.,~,:,\+]+)\)? /i) {print \"$1 $2 $3\n\"} ' ", shell=True, stdout=PIPE)

for line in pipe.stdout:
    parts = line.split() # split line into parts
    if len(parts) > 1:   # if at least 2 parts/columns
        print "Hostname = %s  PublicIP = %s PrivateIP = %s Package name = %s INSTALLED  = %s  AVAILABLE = %s kernal = %s " % (hostname, public_ip, private_ip, parts[0], parts[1], parts[2], running_kernal)

这里有一个图书馆

import json
使用它,您可以获取您的数据结构。。。并将其转换为json

data = [1, 2, 3, {"hello world":42}]
myjson = json.dumps(data)
…基本上就是这样。分别使用
json.load
json.load
从json类和json文件加载。
你可以在

另外,如果你想用缩进打印,试试看

some_dictionary = {'hostname':hostname, 'PublicIP':publicIp, etc}
print(json.dumps(some_dictionary, indent=4))`

这里有一个图书馆

import json
使用它,您可以获取您的数据结构。。。并将其转换为json

data = [1, 2, 3, {"hello world":42}]
myjson = json.dumps(data)
…基本上就是这样。分别使用
json.load
json.load
从json类和json文件加载。
你可以在

另外,如果你想用缩进打印,试试看

some_dictionary = {'hostname':hostname, 'PublicIP':publicIp, etc}
print(json.dumps(some_dictionary, indent=4))`