2009-08-19 2 views
1

기본적으로 필자가 작성한 Python 프로그램에서 무한 크기 (더 정확하게는 메모리 바운드가 아닌 하드 드라이브)를 원한다. tempfile 및 shelve 모듈은 당연히이 용도에 적합하지만 안전 모드에서 함께 사용하는 방법을 알 수 없습니다. shelving이 GCed 될 때 임시 파일을 지우고 싶을 때 (또는 shelve가 언제 사용되지 않더라도 삭제가 보장 될 때), 임시 파일을 열려면 tempfile.TemporaryFile()을 사용하는 것이 필요합니다. 핸들에서 파일 이름을 가져오고,이 파일 이름을 사용하여 선반을 열고, 파일 핸들에 대한 참조를 유지하여 GCed (및 파일 삭제)를받지 못하도록 한 다음이를 저장하는 선반에 래퍼를 배치합니다 참고. 누구나이 복잡한 뒤죽박죽보다 나은 해결책이 있습니까?쉘프에서 파이썬 임시 파일을 사용하는 쉬운 방법이 있습니까?

제한 사항 : 표준 파이썬 라이브러리 만 사용할 수 있으며 완전히 크로스 플랫폼이어야합니다.

답변

1

나는 shelve.Shelf에서 상속 받고 close() 메서드를 재정의하여 파일의 연결을 끊습니다. 사용중인 특정 dbm 모듈에 따라 선반이 포함 된 파일이 두 개 이상있을 수 있습니다. 한 가지 해결책은 임시 파일이 아닌 임시 디렉토리를 만들고 완료되면 디렉토리의 내용을 모두 제거하는 것입니다. 다른 해결책은 특정 dbm 모듈 (예 : bsddb 또는 dumbdbm)에 바인드하고이 라이브러리가 생성하는 파일을 구체적으로 제거하는 것입니다.

(*) 선반의 닫기 메서드는 선반이 가비지 수집 될 때 호출됩니다. 가비지 파일로 끝나는 유일한 경우는 인터프리터가 충돌하거나 죽을 때입니다.

관련 문제