安装pywin32库
pip install pywin32 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
文档 https://mhammond.github.io/pywin32
代码
client.py
# client
import win32pipe
import win32file
import time
PIPE_NAME = r'\\.\pipe\test_pipe'
PIPE_BUFFER_SIZE = 1024
try:
# 等待管道空闲
win32pipe.WaitNamedPipe(PIPE_NAME, win32pipe.NMPWAIT_WAIT_FOREVER)
named_pipe = win32file.CreateFile(PIPE_NAME,
win32file.GENERIC_READ | win32file.GENERIC_WRITE,
0, None,
win32file.OPEN_EXISTING, 0, None)
for i in range(1, 10):
msg = "send --msg " + (str(i))
print(msg)
win32file.WriteFile(named_pipe, msg.encode())
time.sleep(1)
data = win32file.ReadFile(named_pipe, PIPE_BUFFER_SIZE)
if data is None or len(data) < 2:
continue
msg = data[1].decode()
print('rev msg:', msg)
except Exception as e:
print("exception:", e)
finally:
try:
print("CloseHandle")
win32file.CloseHandle(named_pipe)
except Exception as e:
print("close exception:", e)
server.py
# server
# pip install pywin32 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
import win32file
import win32pipe
PIPE_NAME = r'\\.\pipe\test_pipe'
PIPE_BUFFER_SIZE = 1024
while True:
try:
named_pipe = win32pipe.CreateNamedPipe(PIPE_NAME,
win32pipe.PIPE_ACCESS_DUPLEX,
win32pipe.PIPE_TYPE_BYTE | win32pipe.PIPE_READMODE_BYTE | win32pipe.PIPE_WAIT,
win32pipe.PIPE_UNLIMITED_INSTANCES,
PIPE_BUFFER_SIZE,
PIPE_BUFFER_SIZE, 5000, None)
print("named_pipe", named_pipe)
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
msg = data[1].decode()
print('rev msg:', msg)
win32file.WriteFile(named_pipe, msg.encode())
except Exception as e:
print("exception:", e)
break
finally:
try:
win32pipe.DisconnectNamedPipe(named_pipe)
except Exception as e:
print("exception:", e)