2016-03-31 4 views
1

Ich muss auf Socket mit Xmpp-Verbindung für eingehende Nachrichten und Named Pipe (Debian Linux) gleichzeitig hören.Wie man Named Pipe und Socket zur gleichen Zeit in Python zu hören

Das Hauptproblem, wie ich es sehe, ist, dass alles friert nach

os.open('/var/mypipes/outgoing', os.O_RDONLY) 

für Rohr warten, so, Varianten wie

list = {socket.here:'xmpp',os.open('/var/mypipes/outgoing', os.O_RDONLY):'mypipe'} 
while online: 
    (i, o, e) = select.select(list.keys(),[],[],1) 
    for key in i: 
     do smth 

wird nicht funktionieren, und auch wenn ich Ich lege das Ding in select.select:

while online: 
    (i, o, e) = select.select([socket.here,os.open('/var/mypipes/outgoing', os.O_RDONLY)],[],[],1) 
    for key in i: 
     do smth 

es funktioniert auch nicht. Ich bin kein großer Profi in Python, wie Sie sehen können, also wenn Sie mir nur sagen könnten, wo nach einer Lösung zu graben, wird das mehr als genug sein. Buuut ... fertige Lösung ist auch nett. =)

Antwort

0

OK, löst O_NONBLOCK das Problem der Sperrung und die Auswahl Werke afterwars, läuft der folgende Code auf meinem System:

import os 
import select 
l = {os.open('/tmp/pipe', os.O_RDONLY|os.O_NONBLOCK):'mypipe'} 

while True: 
    (i, o, e) = select.select(l.keys(),[],[],1) 
    for key in i: 
     print os.read(key, 1) 

Alles, was Sie tun müssen, ist, die Fehler zu ignorieren, wenn die Rohr ist geschlossen ...