有人可以建议使用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
答案 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()