Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 通过Django应用程序中的子进程调用rst2pdf会截断文件_Python_Django_Subprocess_Rst2pdf - Fatal编程技术网

Python 通过Django应用程序中的子进程调用rst2pdf会截断文件

Python 通过Django应用程序中的子进程调用rst2pdf会截断文件,python,django,subprocess,rst2pdf,Python,Django,Subprocess,Rst2pdf,我在Django应用程序中使用rst2pdf生成格式化的pdf文件。这是我用来做这件事的代码: 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 '

我在Django应用程序中使用rst2pdf生成格式化的pdf文件。这是我用来做这件事的代码:

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很好。但由于某种原因,当我从Django应用程序内部调用rst2pdf时,文件被截断。关于什么会导致这种情况,或者关于如何调试子流程调用,有什么想法吗?

看起来我没有完全理解python如何处理可写文件。显然,在调用temp_file.write之后,缓冲区中仍然有数据无法写入,除非调用temp_file.close或temp_file.flush