【问题标题】:createNamedPipe in python在 python 中创建命名管道
【发布时间】:2012-11-10 05:51:54
【问题描述】:

你好,我有两个 python 文件(命名管道)

a.py

import win32pipe, win32file

p = win32pipe.CreateNamedPipe(r'\\.\pipe\test_pipe',
    win32pipe.PIPE_ACCESS_DUPLEX,
    win32pipe.PIPE_TYPE_MESSAGE | win32pipe.PIPE_WAIT,
    1, 65536, 65536,300,None)

win32pipe.ConnectNamedPipe(p, None)


data = "Hello Pipe"  
win32file.WriteFile(p, data)

此管道创建一个命名管道“test_pipe”并将数据写入管道。

b.py

import win32pipe, win32file
import win32file
fileHandle = win32file.CreateFile("\\\\.\\pipe\\test_pipe",
                              win32file.GENERIC_READ | win32file.GENERIC_WRITE,
                              0, None,
                              win32file.OPEN_EXISTING,
                              0, None)
data = win32file.ReadFile(fileHandle, 4096)
print data

我能够毫无问题地获取数据。但我得到的数据是这种形式的(我用双引号将输出括起来)

"<0, Hello Pipe>" 

我无法弄清楚为什么要打印所有这些变量()a.py 或 b.py 中的问题在哪里以及如何解决这个问题。

【问题讨论】:

    标签: python windows


    【解决方案1】:

    这正是win32file.ReadFile() 返回的内容。它返回结果和读取数据的元组。您应该验证结果为 0(或任何其他适用的值),然后读取数据。

    data = win32file.ReadFile(fileHandle, 4096)
    if data[0] == 0:
      print data[1]
    else:
      print 'ERROR', data[0]
    

    【讨论】:

    • 另外,可以通过调用win32api.FormatMessage(data[0]) 来打印错误消息,或者更好的是,引发一个使用错误字符串构造的IOError
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-28
    • 2012-07-29
    • 1970-01-01
    • 2011-02-13
    • 2014-12-21
    • 2018-10-03
    相关资源
    最近更新 更多