2012-11-10 19 views
6

chào Tôi có hai file python (namedpipe)createNamedPipe trong 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) 

ống này tạo ra một namedpipe "test_pipe" và ghi dữ liệu vào ống.

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 

i am có thể lấy dữ liệu mà không cần bất kỳ vấn đề. nhưng dữ liệu tôi nhận được là theo hình thức này (tôi đã kèm theo sản lượng trong dấu ngoặc kép)

"<0, Hello Pipe>" 

Tôi không thể tìm ra lý do tại sao tất cả các biến này đang được in (<, 0,>) mà là vấn đề trong a.py hoặc b.py và cách tôi có thể sửa lỗi này.

Trả lời

6

Đó chỉ là những gì win32file.ReadFile() trả về. Nó trả về một tuple của kết quả và dữ liệu đọc. Bạn nên xác minh kết quả là 0 (hoặc bất kỳ điều gì khác có thể áp dụng) và sau đó đọc dữ liệu.

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

Thêm vào đó, người ta có thể in được thông báo lỗi bằng cách gọi [ 'win32api.FormatMessage (dữ liệu [0])'] (http://docs.activestate.com/activepython/2.4/pywin32/win32api__FormatMessage_meth.html) hoặc, tốt hơn, nâng một 'IOError' được xây dựng với chuỗi lỗi. – user4815162342