检测并处理通过 Python 中的 os.system 调用生成的 LaTeX 警告/错误
我编写了一个 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 错误,我会被带到 LaTeX 的 CLI,例如,
[10]
! You can't use `macro parameter character #' in vertical mode.
l.625 #
?
然后我需要手动打破这个错误。有没有一种方法可以让 Python “知道” os.system 调用在 LaTeX 中生成了错误,然后结束此调用但仍然捕获错误文本?
I wrote a python script to automate turning Sweave/LaTeX documents into PDFs. Here's the most important part:
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)
This works great if there are no errors, but if there is a LaTeX error, I am brought to the CLI for LaTeX e.g.,
[10]
! You can't use `macro parameter character #' in vertical mode.
l.625 #
?
I then need to break out of this manually. Is there a way that I can let Python "know" that the os.system call generated an error in LaTeX and then end this call but still capturing the error text?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
os.system
,而是使用subprocess
模块。pdflatex
有一个-interaction
开关,您可以使用它将其设置为非交互模式(您可能需要batchmode
或nonstopmode< /code> IIRC,但您可以尝试并查看每个选项的作用)。
os.system
, usesubprocess
module instead.pdflatex
has an-interaction
switch that you can use to put it a non-interactive mode (you probably wantbatchmode
ornonstopmode
IIRC, but you can experiment and see what each option do).将
-interaction=nonstopmode
标志传递给 LaTeX。Pass the
-interaction=nonstopmode
flag to LaTeX.