[英]Need a better way to execute console commands from python and log the results
[英]Is there a better way to execute commands in JSON running python
有人可以建議一種使用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"
}
蟒蛇:
$ 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
這是您要查找的結構和代碼:
$ 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()
輸出:
$ python parse.py test2.json
start
[u'mkdir -p /home/ec2-user/data2/opt/ODS', u'mkdir -p /home/ec2-user/data4/opt/ODS', u'mkdir -p /home/ec2-user/data5/opt/ODS']
end
在您的示例中,使用os.makedirs會更好。
但是,如果您確實需要subprocess
模塊-我建議您使用單個子流程實例執行命令。 例如:
subprocess.call('; '.join(data.values()), shell=True)
與@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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.