У меня есть окно Flask, которое генерирует данные и сохраняет их как CSV-файл с Pandas, а затем отображает данные. Второе представление обслуживает сгенерированный файл. Я хочу удалить файл после его загрузки. Мой текущий код вызывает ошибку разрешения, возможно, потому, что after_request
удаляет файл перед его подачей с send_from_directory
. Как я могу удалить файл после его обслуживания?Удалить файл после того, как Flask его обслуживает
def process_data(data)
tempname = str(uuid4()) + '.csv'
data['text'].to_csv('samo/static/temp/{}'.format(tempname))
return file
@projects.route('/getcsv/<file>')
def getcsv(file):
@after_this_request
def cleanup(response):
os.remove('samo/static/temp/' + file)
return response
return send_from_directory(directory=cwd + '/samo/static/temp/', filename=file, as_attachment=True)
Технически, учитывая у вас есть открытый файловый объект, открытый на нем, вы можете удалить файл из файловой системы перед первым выходом в UNIX-прежнему будет держать файл вокруг, пока процесс до сих пор его открытым, несмотря на то, запись в каталоге файловой системы отсутствует. Конечно, это зависит от того, хотите ли вы удалить файл только в том случае, если вы достаточно уверены в том, что его все отправили, или если он был временным файлом и всегда хочет его удалить, даже если в какой-то момент его возврат не выполняется. –
@GrahamDumpleton Я предполагаю, что проблема в Windows, и я помню, что не работал с операциями над открытыми файлами. – davidism
Мы всегда можем надеяться, что никто никогда не использует Windows для веб-программирования. ;-) –