次のキー コードを使用して、Windows の名前付きパイプを使用するサーバーを構築しました。
def run( self ):
# This is the main server loop for the Win32 platform
import win32pipe
import win32file
self.pipeHandle = win32pipe.CreateNamedPipe(
'\\\\.\\pipe\\myapp_requests',
win32pipe.PIPE_ACCESS_DUPLEX,
win32pipe.PIPE_TYPE_BYTE |
win32pipe.PIPE_READMODE_BYTE |
win32pipe.PIPE_WAIT,
1,
4096,
4096,
10000,
None)
if self.pipeHandle == win32file.INVALID_HANDLE_VALUE:
print 'Failed to create named pipe %s!' % self.pipeName
print 'Exiting...'
sys.exit(1)
while True:
# Open file connection
win32pipe.ConnectNamedPipe( self.pipeHandle )
# Run the main message loop until it exits, usually because
# of a loss of communication on the pipe
try:
self.messageLoop()
except ServerKillSignal:
break
# Return the pipes to their disconnected condition and try again
try: win32pipe.DisconnectNamedPipe( self.pipeHandle )
except: pass
win32file.CloseHandle( self.pipeHandle )
print "Exiting server"
このメソッドは、 win32file.error がスローされるまでmessageLoop()
、 を使用してパイプからデータを読み取ります。win32file.ReadFile()
その後、終了し、run() が再起動できるようにします。
私の実装では、ユーザーが管理者アクセス権を持っている可能性は低いため、これをシステム サービスとして開始することはできませんでした。代わりに、'\.\pipe\pyccf_requests' でパイプの存在を確認するようにクライアントをコーディングしました。存在しない場合、クライアントは新しいサーバー プロセスを開始します。