pythonwindows管道_Python进程间通信之命名管道(Windows)

前面文章说了一下 Linux 命名管道的实现,今天看看 Windows 上我们怎么实现。

在 Windows 上的命名管道主要是通过调用 win32 api 的以下方法来实现的:win32pipe.CreateNamedPipe()

win32pipe.ConnectNamedPipe()

win32file.ReadFile()

win32file.WriteFile()

下面看一个例子,比较简单,只是需要注意一下命名管道的命名规则。

server.pyimport win32file

import win32pipe

PIPE_NAME = r'\\.\pipe\test_pipe'

PIPE_BUFFER_SIZE = 65535

while True:

named_pipe = win32pipe.CreateNamedPipe(PIPE_NAME,

win32pipe.PIPE_ACCESS_DUPLEX,

win32pipe.PIPE_TYPE_MESSAGE | win32pipe.PIPE_WAIT | win32pipe.PIPE_READMODE_MESSAGE,

win32pipe.PIPE_UNLIMITED_INSTANCES,

PIPE_BUFFER_SIZE,

PIPE_BUFFER_SIZE, 500, None)

try:

while True:

try:

win32pipe.ConnectNamedPipe(named_pipe, None)

data = win32file.ReadFile(named_pipe, PIPE_BUFFER_SIZE, None)

if data is None or len(data) < 2:

continue

print 'receive msg:', data

except BaseException as e:

print "exception:", e

break

finally:

try:

win32pipe.DisconnectNamedPipe(named_pipe)

except:

pass

client.pyimport win32pipe, win32file

import time

PIPE_NAME = r'\\.\pipe\test_pipe'

file_handle = win32file.CreateFile(PIPE_NAME,

win32file.GENERIC_READ | win32file.GENERIC_WRITE,

win32file.FILE_SHARE_WRITE, None,

win32file.OPEN_EXISTING, 0, None)

try:

for i in range(1, 11):

msg = str(i)

print 'send msg:', msg

win32file.WriteFile(file_handle, msg)

time.sleep(1)

finally:

try:

win32file.CloseHandle(file_handle)

except:

pass

测试首先运行server.py

然后运行client.py

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值