有没有更好的方法在运行python的JSON中执行命令

时间:2017-09-18 18:14:03

标签: python json

有人可以建议使用Python在JSON中执行多个命令的更好方法。

例如,如何改进以下内容:

JSON:

$ python -m json.tool test2.json

{
"command": "mkdir -p /home/ec2-user/data2/opt/ODS",
"command1": "mkdir -p /home/ec2-user/data4/opt/ODS",
"command2": "mkdir -p /home/ec2-user/data5/opt/ODS"
}

的Python:

$ cat parse.py
   import json
   import sys
   import subprocess
   from pprint import pprint

   jdata = open(sys.argv[1])

   data = json.load(jdata)

   print "start"
   print(data)
   subprocess.call(data['command'], shell=True)
   subprocess.call(data['command1'], shell=True)
   subprocess.call(data['command2'], shell=True)
   print "end"
   jdata.close()

输出:

] $ python parse.py test2.json 开始 {u'command1':u'mkdir -p / home / ec2-user / data4 / opt / ODS',u'command2':u'mkdir -p / home / ec2-user / data5 / opt / ODS',u 'command':u'mkdir -p / home / ec2-user / data2 / opt / ODS'} 端

TIA

3 个答案:

答案 0 :(得分:1)

这是您正在寻找的结构和代码:

B

的Python:

$ python -m json.tool test2.json
[
    "mkdir -p /home/ec2-user/data2/opt/ODS",
    "mkdir -p /home/ec2-user/data4/opt/ODS",
    "mkdir -p /home/ec2-user/data5/opt/ODS"
]

输出:

$ cat parse.py 
import json
import sys
import subprocess
from pprint import pprint

jdata = open(sys.argv[1])

data = json.load(jdata)

print "start"
print(data)
for command in data:
  subprocess.call(command, shell=True)
print "end"
jdata.close()

答案 1 :(得分:0)

在您的示例中,最好使用os.makedirs

但是如果你真的需要subprocess模块 - 我建议你用单个子进程实例执行exec命令。例如:

subprocess.call('; '.join(data.values()), shell=True)

答案 2 :(得分:0)

与@ Mark的答案类似,但保留原始结构:

$ cat parse.py
import json
import sys
import 
from pprint import pprint

jdata = open(sys.argv[1])

data = json.load(jdata)

print "start"
print(data)
for command in data.values():                
  subprocess.call(command, shell=True)
print "end"
jdata.close()