2012-11-10 17 views
6

ciao Ho due file python (NamedPipe)CreateNamedPipe in pitone

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) 

questo tubo crea un NamedPipe "test_pipe" e scrive i dati nel tubo.

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 

io sono in grado di ottenere i dati senza alcun problema. ma i dati che ottengo è in questa forma (ho racchiuso l'uscita tra virgolette)

"<0, Hello Pipe>" 

Non riesco a capire il motivo per cui tutte queste variabili sono in corso di stampa (<, 0,>), dove è il problema in a.py o b.py e come posso risolvere questo problema.

risposta

6

Questo è proprio ciò che restituisce win32file.ReadFile(). Restituisce una tupla del risultato e dei dati letti. È necessario verificare che il risultato sia 0 (o qualsiasi altra cosa applicabile) e quindi leggere i dati.

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

Inoltre, si può stampare il messaggio di errore chiamando [win32api.FormatMessage (dati [0]) ''] (http://docs.activestate.com/activepython/2.4/pywin32/win32api__FormatMessage_meth.html) o, meglio ancora, genera un 'IOError' costruito con la stringa di errore. – user4815162342