在python中通过subprocess.call()执行RaptorXML命令时出错

时间:2015-07-30 15:52:22

标签: python subprocess altova xbrl

我正在尝试从python脚本通过subprocess.call()执行RaptorXML + XBRL命令。语法是:

result = call(["/opt/Altova/RaptorXMLXBRLServer2015/bin/raptorxmlxbrl xbrl","--listfile", joblist],shell=True )

joblist = "valSECfilings.jobs"。但是当我执行这个python脚本时,我收到了这个错误:

Error: No value for mandatory argument 'FILE' specified.
Usage:
   raptorxmlxbrl valxbrl [options] FILE...

   valxbrl can be abbreviated with: xbrl

当我直接在终端上执行此命令时,我没有收到任何错误:

/opt/Altova/RaptorXMLXBRLServer2015/bin/raptorxmlxbrl xbrl --listfile "valSECfilings.jobs"

任何人都可以帮助我指出这里可能出现的问题以及解决方法吗?

1 个答案:

答案 0 :(得分:0)

遗憾的是,Python documentation在这一点上有点不清楚,但是当您将shell=True传递给subprocess.call时,args参数应该是单个字符串而不是一个列表。如果shell=False(默认值),它应该是命令和单个参数的列表。

所以这两个都是正确的:

result = call(["/opt/Altova/RaptorXMLXBRLServer2015/bin/raptorxmlxbrl", "xbrl", "--listfile", joblist])

result = call("/opt/Altova/RaptorXMLXBRLServer2015/bin/raptorxmlxbrl xbrl --listfile " + joblist, shell=True)

我更喜欢第一个(非shell)版本,因为第二个版本意味着您必须确保joblist字符串不包含空格或不正确的引号字符。