標準のfcntl
モジュールを使用するPythonプロジェクト(たまたまDjangoプロジェクトである場合))を受け取りましたLinuxでのみ利用可能と思われるライブラリ。Windowsマシンで実行しようとすると、このモジュールはここに存在しないため、ImportError
で停止します。
Windowsで動作するようにプログラムに小さな変更を加える方法はありますか?
ウィンドウ上のfcntl
の代替はwin32api
呼び出し。使い方は完全に異なります。ただひっくり返すことができるスイッチではありません。
つまり、fcntl
- heavy-userモジュールをWindowsに移植するのは簡単ではありません。各fcntl
呼び出しが正確に何をするかを分析してから、同等のwin32api
コード(ある場合)。
fcntl
を使用する一部のコードに同等のウィンドウがない可能性もあります。これにより、モジュールapiを変更し、移植するモジュールを使用するプログラムの構造/パラダイムを変更する必要があります。
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
これはすぐに助けにはなりませんが、Unix(fcntl)とWindows(win32 api呼び出し)の両方で動作する代替手段があります。portalocker
それは、Pythonのflockスタイルのファイルロックのためのクロスプラットフォーム(posix/nt)APIとしてそれ自身を説明します。基本的に、fcntlをwin32 API呼び出しにマップします。
http://code.activestate.com/recipes/65203/ の元のコードは、個別のパッケージとしてインストールできるようになりました- https://pypi.python.org/pypi/ portalocker