2010-07-30 5 views
6

가능한 중복 :
check what files are open in Python현재 열려있는 모든 파일 핸들을 나열 하시겠습니까?

안녕하세요,

현재 열려있는 모든 파일 핸들의 목록을 얻을 수있다, 나는 그들이 환경에 어딘가에 저장되어 있다고 가정 .

치명적인 오류가 발생했을 때 열려있는 모든 파일을 안전하게 처리하고 싶습니다. 즉, 파일을 닫고 파일이 손상 될 가능성이있는 파일을 원본 파일로 대체하고 싶습니다.

처리 작업이 있지만 어떤 파일 핸들이 열려 있는지 알지 못해서이 아이디어를 구현할 수 없습니다.

파일 핸들이 초기화 될 때 다른 가져온 방법으로 상속 할 수 있습니까?

, 당신에게

+3

중복 된 http://stackoverflow.com/questions/2023608/check-what-files-are-open-in-python – robert

+0

o/s? 태그로 추가하는 것도 도움이 될 수 있습니다. – Mawg

답변

3

이 파일을 열 때 추적 할 코드를 수정하는 것이 일의 좋은 방법 :

def log_open(*args, **kwargs): 
    print("Opening a file...") 
    print(*args, **kwargs) 
    return open(*args, **kwargs) 

그런 다음 open 대신 log_open을 사용하여 파일을 엽니 다. File 클래스를 수정하여 자신을 로그하는 것과 같은 좀 더 해킹 할 수 있습니다. 위의 링크 된 질문에서 다룹니다.

아마 역겨운, 더러운 해킹 가비지 컬렉터를 포함 또는 __dict__ 또는 뭔가를 찾고있다,하지만 당신은하고 싶지 않아 당신 절대적으로 정말 정말 심각하게 해야하지 않는 한. 당신은 파이썬을 사용하는 경우 (미래 가져 오기는 with_statement에서 2.5 요구`하지만)

with open('filename.txt', 'r') as f: 
    #do stuff here 
    pass 
#here f has been closed and disposed properly - even with raised exceptions 

내가 주방장을 필요로 치명적인 오류의 종류를 모르는

5

lsof를 감사/PROC/PID/FD/

0

은 2.5 + 당신은 with 키워드를 사용할 수 있습니다 with 성명,하지만 정말 나쁜 것 같아요. WinXP에서 내 비 과학적 테스트 :

import time 
with open('test.txt', 'w') as f: 
    f.write('testing\n') 
    while True: 
     time.sleep(1) 

그런 다음 Windows 작업 관리자로 프로세스를 종료해도 여전히 파일에 데이터가 기록됩니다.

관련 문제