我有一个XML文件,我从ftp中恢复过来。我想将此xml转换为json 我使用xml2json
如何在Python脚本中调用外部命令?
python脚本:
#!/usr/bin/env python
import ftplib
import os
# Connection information
server = 'xxxxxx.xxxx'
username = 'xxxxxxxx'
password = 'xxxxxxxx'
# Directory and matching information
directory = '/datas/'
filematch = '*.xml'
src='/opt/scripts/'
dst='/opt/data/'
# Establish the connection
ftp = ftplib.FTP(server)
ftp.login(username, password)
# Change to the proper directory
ftp.cwd(directory)
# Loop through matching files and download each one individually
for filename in ftp.nlst(filematch):
fhandle = open(filename, 'wb')
print 'Getting ' + filename
ftp.retrbinary('RETR ' + filename, fhandle.write)
fhandle.close()
#?????????????????? EXECUTE XML2JSON TO CONVERT MY XML INTO JSON ???????????????????????
#?????????????????? xml2json -t xml2json -o stockvo.json stockvo.xml --strip_text ?????????????
#move the stockvo.xml file to destination
os.system('mv %s %s' % (src+'stockvo.xml', dst+'stockvo.xml'))
#remove the src file
os.unlink(src+'stockvo.xml')
答案 0 :(得分:3)
subprocess module具有此功能。
您可以执行以下操作:
import subprocess
subprocess.call('xml2json -t xml2json -o stockvo.json stockvo.xml --strip_text', shell=True)
请注意,使用shell=True
选项可能存在安全隐患,但这取决于您将对脚本执行的操作以及潜在用户是否可以尝试对其执行shell injection。
修改:正如@PadraicCunningham建议的那样,实际上不需要使用shell=True
,因为您没有使用shell实用程序作为通配符或{{1}为家庭扩张。所以它应该只能起作用:
~
答案 1 :(得分:0)
import subprocess
subprocess.call(['xml2json', '-t', 'xml2json', '-o', 'stockvo.json', 'stockvo.xml', '--strip_text'])
答案 2 :(得分:0)
使用subprocess模块:
subprocess.check_call(args,*,stdin = None,stdout = None,stderr = None, 壳=假)强>' 使用参数运行命令。等待命令完成。 如果返回码为零,则返回,否则加注
CalledProcessError
。CalledProcessError
对象将返回 返回码属性中的代码。
import subprocess
try:
subprocess.check_call(['xml2json', '-t', 'xml2json', '-o', 'stockvo.json', 'stockvo.xml' '--strip_text'])
except subprocess.CalledProcessError:
pass # handle failure here