我想执行以下命令
pdflatex -interaction=nonstopmode -shell-escape "fontsample - Latin Modern Family.tex"
从控制台完美无缺。
在python中,我执行以下代码
tex.callSystemCommand(['pdflatex', '-interaction=nonstopmode', '-shell-escape', '"' + filename + '.tex"'])
def callSystemCommand(command):
try:
retcode = subprocess.call(command) # shell=True
if retcode != 0:
print("System command was terminated by signal", -retcode, file=sys.stderr)
sys.exit()
except OSError as e:
print("Execution failed:", e, file=sys.stderr)
以-1失败。我想知道究竟是什么执行。
编辑: 执行正常
executeCode = 'pdflatex.exe -interaction=nonstopmode -shell-escape "' \
+ filename + '"'
os.system(executeCode)
答案 0 :(得分:1)
该命令可能会失败,因为它找不到名为"somefilename"
的文件。通常,shell将处理"
中包含的参数,将它们剥离并将文件名(带空格)作为单个参数传递。当您将参数subprocess
传递给shell=True
时,参数将按原样传递给pdflatex子流程,文件名本身不会以“”开头或结尾,因此它不存在。程序pdflatex可能会退出此代码,因为它无法找到文件名。
尝试以下方法:
tex.callSystemCommand(['pdflatex', '-interaction=nonstopmode', '-shell-escape', filename + '.tex'])
此外,在您展示工作的示例中(使用os.system
),您没有在文件名中添加.tex
,因此它取决于您如何将其提供给python脚本,这可能是解决方案:
tex.callSystemCommand(['pdflatex', '-interaction=nonstopmode', '-shell-escape', filename ])
答案 1 :(得分:-2)
你可以试试这个:
import subprocess
subprocess.Popen(['pdflatex', '-interaction=nonstopmode',
'-shell-escape', filename + '.tex'], shell=True)