Вызов rst2pdf через подпроцесс в файле усечений приложения Django
Я использую rst2pdf для создания отформатированного файла PDF в моем приложении Django. Это код, который я использую для этого:
temp_file = tempfile.NamedTemporaryFile(mode='w+t', dir=PDF_PATH, delete=False)
temp_pdf = tempfile.NamedTemporaryFile(dir=PDF_PATH, delete=False)
temp_file.write(plaintext)
subprocess.call('rst2pdf ' + temp_file.name +' -s '+ STYLESHEET_PATH +' -o ' + temp_pdf.name, shell=True)
pdf = open(temp_pdf.name, 'rb')
response = HttpResponse(pdf.read(), mimetype='application/force-download')
response['Content-Disposition'] = 'attachment; filename=output.pdf'
response['Content-Length'] = os.stat(temp_pdf.name).st_size
return response
По какой-то причине PDF-файл, который используется в качестве ответа, усекается на последней странице. PDF в файловой системе усекается. Я вижу открытый текст, который пишется в PDF, и это все там. Я даже запустил тот же самый вызов rst2pdf в командной строке со всеми теми же аргументами, и PDF был сгенерирован нормально. Но по какой-то причине, когда я вызываю rst2pdf из моего приложения Django, файл обрезается. Любые идеи о том, что может вызвать это, или о том, как я могу отладить вызов подпроцесса?
1 ответ
Похоже, я не до конца понял, как python обрабатывает записываемые файлы. Очевидно после вызова temp_file.write в буфере все еще есть данные, которые не будут записаны, пока я не вызову temp_file.close() или temp_file.flush().