2009-08-24 6 views
3

유닉스에서 파이썬을 사용하여 파일이 잠겨 있는지 여부를 감지하고 싶습니다. 파일이 잠겼는지 여부를 감지하는 데 도움이된다고 가정하면 파일을 삭제해도됩니다.잠긴 파일을 파이썬에서 찾아서 삭제합니다.

파일은 원래 다른 프로세스에서 독점적으로 열었을 수 있습니다. os.unlink가 파일이 잠겨 있어도 반드시 오류를 반환하지는 않는다는 문서가 있습니다.

아이디어가 있으십니까? fcntl 문서에서

답변

6

파일이 잠겨 있는지 확인하는 가장 좋은 방법은 파일을 잠그는 것입니다. fcntl module은 Python에서이를 수행합니다 (예 :

fcntl.lockf(fileobj.fileno(), fcntl.LOCK_EX | fcntl.LOCK_NB)

파일이 이미 잠겨있는 경우는 IO 오류를 올릴 것이다; 그렇지 않은 경우, 당신은 다음

fcntl.lockf(fileobj.fileno(), fcntl.LOCK_UN)

다시 잠금을 해제하려면 호출 할 수 있습니다.

Windows와 달리 파일을 쓰기 만해도 Unix에서 자동으로 독점적 인 잠금 기능을 제공하지 않습니다. 또한 Windows에서는 fcntl 모듈을 사용할 수 없습니다. os.open을 사용해야합니다.이 인터페이스는 훨씬 덜 친숙하지만 더 이식성이 뛰어난 인터페이스입니다 (또한 파일을 다시 열어야 할 수도 있음).

6

:

fcntl.lockf (FD, 동작 [길이 [시작 [어디서]])

LOCK_NB 사용 로크가 획득 될 수 없다면, IOError가 발생하고 예외는 errno 속성이 EACCES 또는 EAGAIN으로 설정됩니다 (운영 체제에 따라 다름, 이식성, 두 값 모두 확인).

기본 유닉스 flock 메커니즘을 사용하므로 원하는대로 작동해야합니다. 플랫폼에 독립적 일 수있는 os.open도 있습니다.

관련 문제