一連のグラフを生成し、グラフを含むPDFレポートを生成するPythonスクリプトを作成しました。これはサーバー上で生成されることを目的としています。ReportLabを使用してPDFを生成しています。スクリプトは、Windows7を実行しているマシンで実行されています。
スクリプトの最初に、ReportLabフローアブルを保存するためのリストと各図のパスを保存するためのリストが設定されています。
Story = []
FigList = []
各グラフはMatplotlibを使用して生成され、PNGとして保存されます。画像がStoryに追加され、ファイルのパスがFigListに追加されます。
fig = plt.figure(1)
ax = fig.add_subplot(1, 1, 1)
ax.plot(x, y)
fname = "figure.png"
fig.savefig(fname)
FigList.append(fname)
Story.append(Image(fname))
これは、いくつかの画像(合計で約10〜15)に対して繰り返されます。スクリプトの最後に、ドキュメントが作成されます
doc = SimpleDocTemplate("report.pdf",
pagesize=A4,
rightMargin=cm,
leftMargin=cm,
topMargin=cm,
bottomMargin=cm)
doc.build(Story)
この後、を使用して作成されたすべてのPNGファイルを削除したいと思います
for f in FigList:
if os.path.exists(f): os.remove(f)
ただし、次のエラーが表示されます
WindowsError:[エラー32]別のプロセスによって使用されているため、プロセスはファイルにアクセスできません:'image.png'
ここでは、ドキュメント作成プロセスが別のスレッドで実行されていると想定しているため、スクリプトがFigureファイルを削除しようとすると、ファイルマネージャーによって開いているとマークされたままになります。
このプロセスは何度も実行される可能性があるため、プロセスが終了する前にこれらのイメージファイルを削除することが重要です。そのため、一時的なイメージファイルはすぐに多くのスペースを占有します。
ファイルの削除に進む前に、すべての画像が閉じられるのをスクリプトに待機させる方法はありますか?