2012-11-10 3 views
6

안녕하세요 두 파이썬 파일 (명명 된 파이프)반드시 CreateNamedPipe

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"를 생성하고, 파이프에 데이터를 쓰고있다. 난 아무 문제없이 데이터를 얻을 수 있어요

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 

b.py. 하지만 난 얻을 데이터가 (내가 따옴표로 출력을 동봉)

"<0, Hello Pipe>" 

을 모든 변수가 인쇄되는 이유를 알아낼 수없는 생각이 형태 (<, 0>) 여기서 문제는 a.py 또는 b.py에서 어떻게 해결할 수 있는지 알려주세요.

답변

6

그게 바로 win32file.ReadFile()입니다. 결과의 튜플과 읽은 데이터를 반환합니다. 결과가 0 (또는 적용 가능한 다른 모든 것)인지 확인한 다음 데이터를 읽어야합니다.

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

또한 하나 호출하여 에러 메시지를 출력 할 수 ['win32api.FormatMessage (데이터 [0]) '(http://docs.activestate.com/activepython/2.4/pywin32/win32api__FormatMessage_meth.html) 또는 더 나은 방법은 오류 문자열로 생성 된 IOError를 발생시키는 것입니다. – user4815162342

관련 문제