簡體   English   中英

是否有更好的方法在運行python的JSON中執行命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM