복붙노트

[PYTHON] Windows에서 fcntl 대체

PYTHON

Windows에서 fcntl 대체

필자는 표준 라이브러리에서 fcntl 모듈을 사용하는 Python 프로젝트 (장고 프로젝트 인 경우에는 이런 일이 발생 함)를 받았다. 표준 라이브러리는 Linux에서만 사용할 수있는 것으로 보인다. 내 Windows 컴퓨터에서 실행하려고하면이 모듈이 여기에 없기 때문에 ImportError로 중지합니다.

Windows에서 작동하도록 프로그램을 약간 변경하는 방법이 있습니까?

해결법

  1. ==============================

    1.Windows에서 fcntl 대신 win32api 호출이 사용됩니다. 사용법은 완전히 다릅니다. 플립 할 수있는 스위치가 아닙니다.

    Windows에서 fcntl 대신 win32api 호출이 사용됩니다. 사용법은 완전히 다릅니다. 플립 할 수있는 스위치가 아닙니다.

    즉, 윈도우에 fcntl-heavy-user 모듈을 이식하는 것은 쉽지 않습니다. 각 fcntl 호출이 정확히 무엇을하는지 분석 한 다음 동등한 win32api 코드가 있으면 찾으십시오.

    또한 fcntl을 사용하는 일부 코드에는 Windows와 동등한 기능이 없기 때문에 모듈 api와 어쩌면 이식중인 모듈을 사용하는 프로그램의 구조 / 패러다임을 변경해야 할 수도 있습니다.

    fcntl 호출에 대한 자세한 내용을 제공하면 사람들이 동등한 윈도우를 찾을 수 있습니다.

  2. ==============================

    2.fcntl 모듈은 고정 파일을 잠그는 데만 사용되므로 다중 액세스를 시도하지 않는다고 가정 할 때 이는 적절한 해결책이 될 수 있습니다. 이 모듈을 sys.path에 넣으면 공식 fcntl 모듈처럼 작동해야합니다.

    fcntl 모듈은 고정 파일을 잠그는 데만 사용되므로 다중 액세스를 시도하지 않는다고 가정 할 때 이는 적절한 해결책이 될 수 있습니다. 이 모듈을 sys.path에 넣으면 공식 fcntl 모듈처럼 작동해야합니다.

    Windows에서만 개발 / 테스트 용으로이 모듈을 사용해보십시오.

    def fcntl(fd, op, arg=0):
        return 0
    
    def ioctl(fd, op, arg=0, mutable_flag=True):
        if mutable_flag:
            return 0
        else:
            return ""
    
    def flock(fd, op):
        return
    
    def lockf(fd, operation, length=0, start=0, whence=0):
        return
    
  3. ==============================

    3.이 방법이 곧 도움이되지는 않지만, Unix (fcntl)와 Windows (win32 API 호출) 모두에서 작동 할 수있는 대안이 있습니다 : portalocker

    이 방법이 곧 도움이되지는 않지만, Unix (fcntl)와 Windows (win32 API 호출) 모두에서 작동 할 수있는 대안이 있습니다 : portalocker

    Python을위한 flock-style 파일 잠금을위한 크로스 플랫폼 (posix / nt) API로 설명합니다. 기본적으로 fcntl을 win32 API 호출에 매핑합니다.

    http://code.activestate.com/recipes/65203/의 원본 코드를 별도의 패키지 (https://pypi.python.org/pypi/portalocker)로 설치할 수 있습니다.

  4. from https://stackoverflow.com/questions/1422368/fcntl-substitute-on-windows by cc-by-sa and MIT license