長い間、私はctypesであなたのためにそれを行う関数を作成することができました。このプロセスが「排他的」アクセス権を取得していない場合にのみ有効です。もしそうなら、運が悪いので、hereのようなシャドウコピーサービスを使うか、hereを実装する必要があります。
はとにかく、ここに行く:読み取りを共有し、複数のアクセスを可能に扱う書きながら
import ctypes
from ctypes import wintypes
import os
import msvcrt
GENERIC_READ = 0x80000000
GENERIC_WRITE = 0x40000000
OPEN_EXISTING = 3
OPEN_ALWAYS = 4
ACCESS_MODES = {
"r": GENERIC_READ,
"w": GENERIC_WRITE,
"r+": (GENERIC_READ|GENERIC_WRITE)
}
OPEN_MODES = {
"r": OPEN_EXISTING,
"w": OPEN_ALWAYS,
"r+": OPEN_ALWAYS,
}
def open_file_nonblocking(filename, access):
# Removes the b for binary access.
internal_access = access.replace("b", "")
access_mode = ACCESS_MODES[internal_access]
open_mode = OPEN_MODES[internal_access]
handle = wintypes.HANDLE(ctypes.windll.kernel32.CreateFileW(
wintypes.LPWSTR(filename),
wintypes.DWORD(access_mode),
wintypes.DWORD(2|1), # File share read and write
ctypes.c_void_p(0),
wintypes.DWORD(open_mode),
wintypes.DWORD(0),
wintypes.HANDLE(0)
))
try:
fd = msvcrt.open_osfhandle(handle.value, 0)
except OverflowError as exc:
# Python 3.X
raise OSError("Failed to open file.") from None
# Python 2
# raise OSError("Failed to open file.")
return os.fdopen(fd, access)
関数は、ファイルを開きます。その後、ハンドルを通常のPythonファイルオブジェクトに変換します。
終了したら、ファイルを閉じてください。
この回答を確認http://stackoverflow.com/a/30172682/735893 – Vader
すばやくお返事ありがとうございます!私はすでにその投稿を見た。私はそれが勝利システムのためではないと思う。 – Py42
@Vader:そのリンクはUNIX固有の 'fcntl'を使用します.OPはWindowsを使用しています。 – cdarke