miktex (lualatex.exe ) не удается запустить подпроцесс flask из

#python #flask #miktex

#python #flask #miktex

Вопрос:

Я пытаюсь создать файл latex, используя вызов подпроцесса в веб-приложении flask.

     def pdf(self, ixTestsheet):
        build_dir = mkdtemp(prefix="testsheet_")
        tsfile = NamedTemporaryFile(dir=build_dir, suffix=".tex", delete=False)
        tsfile.write(self.latex(ixTestsheet, _print_type).encode("utf-8"))
        old_dir = os.getcwd()
        # os.chdir(build_dir)
        latexname = os.path.basename(tsfile.name)
        tsfile.close()

        # added this to check user of subprocess
        dirout = subprocess.run(
            ["whoami.exe"], cwd=build_dir, check=True, capture_output=True
        )
        current_app.logger.info(dirout)
        try:
            subprocess.run(
                [
                    current_app.config["LUALATEX_EXE"],
                    "--interaction=nonstopmode",
                    latexname,
                ],
                cwd=build_dir,
                check=True,
            )
            # call a second time to get a full build with page numbers etc.
            subprocess.run(
                [
                    current_app.config["LUALATEX_EXE"],
                    "--interaction=nonstopmode",
                    latexname,
                ],
                cwd=build_dir,
                check=True,
            )
        except subprocess.CalledProcessError as e:
            current_app.logger.error(build_dir)
            current_app.logger.error(e)
 

Если я запускаю процесс из приложения flask, он завершается ошибкой со следующей ошибкой. Если я запускаю команду из интерактивного сеанса python, она завершается.

 [2020-12-04 11:51:13,512] INFO in testsheets: CompletedProcess(args=['whoami.exe'], returncode=0, stdout=b'<DOMAINNAME>\<USERNAME>rn', stderr=b'')
lualatex.exe: No suitable temporary directory found.

Sorry, but "c:/Program Files/MiKTeX 2.9/miktex/bin/x64/lualatex.exe" did not succeed.
FATAL: No suitable temporary directory found.
FATAL: Data:
FATAL: Source: LibrariesMiKTeXCoreSessionmiktex.cpp:79
[2020-12-04 11:51:13,745] ERROR in testsheets: C:UsersUSERNA~1AppDataLocalTemptestsheet_oreb8wg5
[2020-12-04 11:51:13,745] ERROR in testsheets: Command '['c:/Program Files/MiKTeX 2.9/miktex/bin/x64/lualatex.exe', '--interaction=nonstopmode', 'tmpfk6un0c7.tex']' returned non-zero exit status 1.
 

Я пытаюсь понять, почему MiKTeX не может найти временный каталог при запуске из flask, но может при запуске из интерактивного сеанса.

Из того, что я вижу:

  1. Пользователь, выполняющий команду из приложения flask, такой же, как пользователь, выполняющий команду из интерактивного сеанса.
  2. У MiKTeX есть все пакеты, необходимые для сборки файла latex
  3. Команда подпроцесса не является проблемой
  4. Разрешения для временного каталога, похоже, в порядке

Комментарии:

1. Отправлено сообщение об ошибке в miktex, поскольку procmon, похоже, указывает мне, что проблема существует. github.com/MiKTeX/miktex/issues/666

Ответ №1:

Кажется, что оба TMP и TEMP существовали в subprocess env, однако TMP были установлены в пустую строку. MiKTeX использовался TMP ранее TEMP , поэтому он потерпел неудачу.

решил это так

 subprocess.run(
                [
                    current_app.config["LUALATEX_EXE"],
                    "--interaction=nonstopmode",
                    latexname,
                ],
                cwd=build_dir,
                check=True,
                env=dict(os.environ, TMP=os.environ["TEMP"]),
            )