파일을 등록하는 방법이 있습니까? 파이썬이 종료 될 때 파일이 종료되는 방법에 관계없이 삭제되도록하려면 어떻게해야합니까? 수명이 긴 임시 파일을 사용하고 있으며 파일을 정리하고 싶습니다.프로그램을 종료 할 때 파일을 제거하는 방법?
파일 이름이 있어야하며 가능한 한 빨리 원래 핸들을 닫아야합니다. 수천 개가 생성되어 정상 파일로만 존재하는지 확인해야합니다.
파일을 등록하는 방법이 있습니까? 파이썬이 종료 될 때 파일이 종료되는 방법에 관계없이 삭제되도록하려면 어떻게해야합니까? 수명이 긴 임시 파일을 사용하고 있으며 파일을 정리하고 싶습니다.프로그램을 종료 할 때 파일을 제거하는 방법?
파일 이름이 있어야하며 가능한 한 빨리 원래 핸들을 닫아야합니다. 수천 개가 생성되어 정상 파일로만 존재하는지 확인해야합니다.
tempfile
module; 그것은 자동 삭제하는 임시 파일을 만듭니다. tempfile.NamedTemporaryFile()
documentation에서
:이 true (디폴트)의 삭제 경우
, 파일을 즉시 닫을으로 삭제됩니다.
이러한 파일 객체를 컨텍스트 관리자로 사용하면 코드 블록이 종료 될 때 자동으로 닫히게되거나 인터프리터가 종료 될 때 닫히게 할 수 있습니다.
대체 방법으로 tempdir.mkdtemp()
이라는 전용 임시 디렉토리를 만들고 프로그램 완료시 전체 디렉토리를 삭제하려면 shutil.rmtree()
을 사용하십시오.
바람직하게는, 다른 컨텍스트 관리자와 후자를 수행
import shutil
import sys
import tempfile
from contextlib import contextmanager
@contextmanager
def tempdir():
path = tempfile.mkdtemp()
try:
yield path
finally:
try:
shutil.rmtree(path)
except IOError:
sys.stderr.write('Failed to clean up temp dir {}'.format(path))
등이 사용
with tempdir() as base_dir:
# main program storing new files in base_dir
# directory cleaned up here
이
당신은이 atexit
hook function이 작업을 수행 할 수도 있지만 상황에 맞는 관리자가 있습니다 많이 청소기 접근.
나는 그 기능을 사용하고있다. 그러나 "close = on"파일을 삭제하고 싶지 않기 때문에 "delete = False"로 설정했다. 나는이 지점을 넘어 존재하는 이름이 프로그램의 다른 부분에서 사용되기를 원합니다. –
@ edA-qamort-ora-y : 그러면 닫을 필요가 없습니다. –
나는이 질문을 분명히했으나 본질적으로 파일이 많기 때문에 파일을 열어 둘 수는 없다. –
atexit library을 사용할 수는 있지만이 모듈을 통해 등록 된 함수는 Python에서 처리하지 않는 신호에 의해 프로그램이 중단되거나 Python의 치명적인 내부 오류가 감지되거나 os ._exit()가 호출됩니다. 하지만 순수한 파이썬에서 이러한 문제를 처리 할 수있는 것은 없다고 생각합니다.
나는 이것이 어떤 의미인지 잘 모르겠다. 이 임시 파일을 왜 사용하고 있습니까? 또한, "정상적인 파일로만 존재하는 것"은 무엇을 의미합니까? – wdh
파일을 사용하여 프로그램의 여러 부분간에 (겉으로보기) 데이터를 전달하는 이유는 무엇입니까? – sapi
@sapi : 여러 종류의 외부 코드 나 프로세스를 위해 temp 디렉토리를 사용합니다.하지만 여러 파일을 생성해야하지만 정리하고 싶습니다. 어쨌든 의미있는 사용 사례가 있습니다. –