发布时间:2019-09-18 07:26:08编辑:auto阅读(2628)
前面文章说了一下 Linux 命名管道的实现,今天看看 Windows 上我们怎么实现。
在 Windows 上的命名管道主要是通过调用 win32 api 的以下方法来实现的: 
- win32pipe.CreateNamedPipe() 
- win32pipe.ConnectNamedPipe() 
- win32file.ReadFile() 
- win32file.WriteFile()
下面看一个例子,比较简单,只是需要注意一下命名管道的命名规则。
import 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
import 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
测试
上一篇: Python中的循环与跳出
下一篇: Office2010的故事 3、PPT中
 51247
 50684
 41285
 38106
 32569
 29470
 28332
 23193
 23159
 21486
 1562°
 2281°
 1888°
 1828°
 2141°
 1874°
 2562°
 4296°
 4149°
 2958°