2014-10-22 2 views
2

Я создал подпроцесс. Приобретите для создания pdf-файла через pdflatex. Фрагмент кода:Не получать сообщения об ошибках из сбойного подпроцесса.Popen

process = subprocess.Popen(command, stdout=subprocess.PIPE, shell=True) 
output, err = process.communicate() 

print output 
print err 

Он работает нормально, но проблема в сообщении об ошибке. Если pdflatex не удается создать файл, например. Я получаю сообщение "Fatal error occured, no output PDF file produced!" в конце напечатанного вывода, я все еще получаю "None", напечатанный как ошибка.

Любое понимание будет оценено

Edit: Добавление stderr=subprocess.PIPE помогает. Я больше не получаю "None", но я получаю пустое сообщение об ошибке независимо от того, успешна ли генерация PDF-файла. Она теперь выглядит следующим образом:

process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) 
same as above 
+0

@padraic cunningham Удаление, которое просто вызывает у меня ошибки типа «Нет такого файла или каталога» (это абсурдность, поскольку он находит его с оболочкой = True). – user2875994

+0

@padraic cunningham shell = True не является частью команды. Я не уверен, как то, что вы говорите, решает проблему:/command - это просто строка, которую я собрал, которая запускает pdflatex в файле. Он отлично работает. – user2875994

+0

@padraic cunningham Ну, я сделал это: [link] (http://pastebin.com/231BGssL), тот же результат. – user2875994

ответ

1

Попробуйте это:

fout = open("temp.txt", "w") 
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=fout, shell=True) 

Я предпочитаю subprocess.check_output(), более удобно.

+0

Это дает мне пустой файл temp.txt (я предполагаю, что stderr = fout должен писать любые ошибки в fout). – user2875994

+0

Вам нужно использовать subprocess.PIPE? попробуйте STDOUT. может быть, это не сообщение об ошибке. – Swing

+0

Я не уверен, что понимаю? stdout дает мне сообщение. Я отрезал каждую строку, кроме двух последних, поскольку они не актуальны, а затем распечатайте их. Одна из строк говорит: «Произошла фатальная ошибка, нет выходного файла PDF!», Поэтому я предполагаю, что это означает, что он должен генерировать сообщение об ошибке ... Вы можете увидеть его здесь: [link] (http://pastebin.com/ rM0H2i8P) – user2875994

Смежные вопросы