標準ライブラリのfcntl
モジュールを使用しているPythonプロジェクト(これはDjangoプロジェクトとなることがあります)はLinuxでのみ利用可能です。 Windowsマシンで実行しようとすると、ここには存在しないため、ImportError
で停止します。fcntlの代わりに
Windowsで動作させるためにプログラムを少し変更する方法はありますか?
標準ライブラリのfcntl
モジュールを使用しているPythonプロジェクト(これはDjangoプロジェクトとなることがあります)はLinuxでのみ利用可能です。 Windowsマシンで実行しようとすると、ここには存在しないため、ImportError
で停止します。fcntlの代わりに
Windowsで動作させるためにプログラムを少し変更する方法はありますか?
ウィンドウ上のfcntl
の代用品は、win32api
コールです。使い方は全く異なります。ちょうど反転できるスイッチではありません。
つまり、fcntl
- 重いユーザーモジュールをウィンドウに移植することは簡単なことではありません。 fcntl
の呼び出しが何を行うのかを正確に分析し、同等のものがある場合はwin32api
コードを見つけ出す必要があります。
fcntl
を使用しているコードでは、同等のウィンドウがない可能性もあります。移植するモジュールを使用して、プログラムのモジュールapiや構造/パラダイムを変更する必要があります。
fcntl
コールの詳細については、同等のものを見つけることができます。
これはすぐにあなたを助けていませんが、UNIX(fcntlの)およびWindows(Win32 APIの呼び出し)の両方で動作することができます代替と呼ばれる、そこにある:portalocker
それはクロスとしての地位を説明プラットフォーム(posix/nt)PythonのフロックスタイルのファイルロックのためのAPI。基本的にfcntlをwin32のapi呼び出しにマップします。
http://code.activestate.com/recipes/65203/で元のコードは、現在別のパッケージとしてインストールすることができます - fcntlのモジュールはちょうどので、あなたが複数のアクセスをしようとしていないと仮定すると、ピニングファイルをロックするために使用されhttps://pypi.python.org/pypi/portalocker
、これは許容することができ回避策。このモジュールをあなたのPYTHONPATHに置きます。それは公式のfcntlモジュールとして動作するだけです。
this moduleを開発/テスト目的で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
これはそのようなハックです。しかし、それは私が必要なものです。 :) –
数値定数を追加しました。 –
fcntl.F_GETFDとfcntl.F_SETFDについて教えてください – JimSEOW
具体的にはfcntlと何をしようとしていますか? fcntl()は多くの異なることを行います。 –