Ошибка при выполнении команды RaptorXML через subprocess.call() в python

Я пытаюсь выполнить команду RaptorXML+XBRL через subprocess.call() из сценария Python. Синтаксис:

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 ответ

Документация Python, к сожалению, не совсем ясна по этому вопросу, но когда вы проходите 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)

Я бы предпочел первую (не оболочку) версию, потому что вторая означает, что вы должны убедиться, что joblist Строка не содержит пробелов или неправильных кавычек.

Другие вопросы по тегам