Обнаружение и обработка предупреждения / ошибки LaTeX, сгенерированного с помощью системного вызова os.system в Python - PullRequest
2 голосов
/ 25 июля 2011

Я написал скрипт на python для автоматизации превращения документов Sweave / LaTeX в PDF-файлы.Вот самая важная часть:

os.system("""echo "Sweave('%s.Rnw')" | R --vanilla --quiet"""%topic)

seq = ['p','b','p','b','p','p']
for op in seq: 
    if op is 'p':
        os.system('pdflatex %s'%topic)
    if op is 'b':
        os.system('bibtex %s'%topic)
    if op is 'l':
        os.system('latex %s'%topic)

Это прекрасно работает, если нет ошибок, но если есть ошибка LaTeX, меня переводят в CLI для LaTeX, например,

[10]
! You can't use `macro parameter character #' in vertical mode.
l.625 #

? 

Затем мне нужно вырваться из этого вручную.Есть ли способ, которым я могу дать Python «знать», что системный вызов os.san сгенерировал ошибку в LaTeX, а затем завершить этот вызов, но все еще захватывая текст ошибки?

Ответы [ 2 ]

4 голосов
/ 25 июля 2011
  1. Не используйте os.system, используйте модуль subprocess.
  2. pdflatex имеет переключатель -interaction, который можно использовать для перевода его в неинтерактивный режим (вы, вероятно, захотите batchmode или nonstopmode IIRC, но вы можете поэкспериментировать и посмотреть, что делает каждый параметр).
1 голос
/ 25 июля 2011

Передайте флаг -interaction=nonstopmode в LaTeX.

...