Python - CalledProcessError: Команда '[...]' вернула ненулевой статус выхода 127 - PullRequest
0 голосов
/ 05 сентября 2018

Я работаю на микросервисе с использованием Bottle в Python, где мне нужно сгенерировать PDF, используя файл .tex. Я использую подпроцесс для создания PDF, но я продолжаю получать ту же ошибку снова и снова:

Traceback (most recent call last):
File "/Users/casa/Desktop/tesisform/bottle.py", line 763, in _handle
return route.call(**args)
File "/Users/casa/Desktop/tesisform/bottle.py", line 1577, in wrapper
rv = callback(*a, **ka)
File "tesis.py", line 114, in tesis_form
subprocess.check_call(["./runtex", texfname])
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 540, in check_call
raise CalledProcessError(retcode, cmd)
CalledProcessError: Command '['./runtex', u'111111']' returned non-zero exit status 127

Я уже перепробовал все решения, найденные для той же ошибки в Stackverflow, но, похоже, ни одно из них не решило мою проблему. Мой код выглядит следующим образом

@route('/pdf')
def tesis_form():
    actn = request.query.actn
    fname = "actas/"+actn + ".json"
    with open(fname,"r") as f:
        data = json.load(f)
    tex = template('tesis-evaluation-tex', data)
    tex = tex.encode('utf-8')
    texfname = "%s" % (actn)
    with open("tmp/"+actn+".tex","w") as f:
        f.write(tex)
    subprocess.check_call(["./runtex", texfname])
    return static_file(actn+".pdf", root='tmp')

А это мой файл runtex

echo $1
cd tmp
pdflatex $1

Любая помощь будет высоко ценится

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

У меня не было дистрибутива LaTeX на компьютере, на котором я работал. Он возвращал ошибку 127, потому что команда pdflatex в runtex не работала. * 1001 то есть *

bash: pdflatex: command not found

Установил MacTeX и теперь все работает как шарм!

0 голосов
/ 05 сентября 2018

Проблема в вашем внешнем скрипте 'runtex', а не в вашем коде Python. Возвращается статус 127; ненулевой статус обычно указывает на ошибку, и вы попросили подпроцесс выдать исключение для ненулевого статуса (используя check_call), так оно и было.

127 обычно обозначает «команда не найдена», так что, возможно, это и так (хотя программа может вернуть 127 по своим собственным причинам).

Если это все, что есть в runtex, вам, вероятно, следует:

  • Добавьте строку shebang: #!/bin/sh в качестве первой строки
  • Убедитесь, что у него есть разрешение на выполнение (chmod +x runtex)

Состояние выхода скрипта - это состояние выхода последней команды, поэтому вполне вероятно, что pdflatex не найден в пути. Убедитесь, что он установлен и установлен на $PATH в среде вашей программы!

...