Python은 access로 파일의 점용 여부를 판단하는 실례 방법

어떤 친구들은 access () 함수로 파일이 점용되었다고 판단할 수 있는지 알고 싶어 합니까?이론적으로 말하면 안 된다.access()는 파일의 읽기와 쓰기 속성을 되돌려준다.친구들을 믿게 하기 위해 편집자는 간단한 테스트를 진행했다.

>>> import os
>>> fn = r'D:\temp\csdn\t.py' #  
>>> os.access(fn, os.F_OK) #  
True
>>> os.access(fn, os.R_OK) #  
True
>>> os.access(fn, os.W_OK) #  
True
>>> os.access(fn, os.X_OK) #  
True
>>> fp = open(fn, 'a+') #  
>>> os.access(fn, os.F_OK) #  
True
>>> os.access(fn, os.R_OK) #  
True
>>> os.access(fn, os.W_OK) #  
True
>>> os.access(fn, os.X_OK) #  
True
>>> fp.close()
보이다access () 는 파일 읽기와 쓰기 속성을 되돌려줍니다. 파일이 점용되었는지 여부와 반 푼의 관계가 없습니다.
나중에 그룹에서 어떤 학우들은try로 오픈 파일을 시도해 봐도 괜찮다고 건의했다. 만약 성공한다면 파일이 점용되지 않았고, 이상을 던지면 파일이 점용되었다는 뜻이다.과연 그럴까?코드로 검증하는 게 낫겠다.

>>> fp1 = open(fn, 'a+')
>>> fp2 = open(fn, 'a+')
>>> fp1.close()
>>> fp2.close()
그 결과 같은 파일을 쓰는 방식으로 여러 번 열었지만 시스템에서 이상이 발견되지 않았다.왜 이러지?그 이유는 파일이 열리는 것과 파일이 차지하는 것이 완전히 다른 문제이기 때문이다.상기 테스트를 할 때'w'방식을 사용하지 마십시오. 그렇지 않으면 파일 내용이 비워질 것입니다.
그렇다면 도대체 파이썬으로 파일이 점용되었는지 아닌지를 어떻게 판단해야 합니까?이 문제는 운영체제 차원으로 돌아가서 해결해야 한다. 즉, win32api 모듈에 의존하는 것이다.

>>> import win32file
>>> def is_used(file_name):
  try:
    vHandle = win32file.CreateFile(file_name, win32file.GENERIC_READ, 0, None, win32file.OPEN_EXISTING, win32file.FILE_ATTRIBUTE_NORMAL, None)
    return int(vHandle) == win32file.INVALID_HANDLE_VALUE
  except:
    return True
  finally:
    try:
      win32file.CloseHandle(vHandle)
    except:
      pass
>>> fn = r'D:\temp\csdn\t.py'
>>> is_used(fn)
False
>>> fp = open(fn, 'a+')
>>> is_used(fn)
True
>>> fp.close()
>>> is_used(fn)
False
간단하게 검증했어, 함수 is_used () 는 기본적으로 사용할 수 있습니다.
파이썬이 access로 파일이 점용되었는지 아닌지를 판단하는 실례적인 방법에 관한 이 글은 여기에 소개되었습니다. 파이썬이 어떻게 access로 파일이 점용되었는지 판단하는 내용은 이전의 글을 검색하거나 아래의 관련 글을 계속 훑어보십시오. 앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기