繁体   English   中英

如何在python中同时监听命名管道和套接字

[英]How to listen named pipe and socket at the same time in python

我需要同时监听带有xmpp连接的套接字,以接收传入消息和命名管道(debian linux)。

如我所见,主要的麻烦是一切都在冻结之后冻结

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

等待管道,所以像

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

将不起作用,即使我将其放入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

它也不起作用。 如您所见,我并不是python的专业人士,因此,如果您只能告诉我在哪里寻找解决方案,那将绰绰有余。 Buuut ...现成的解决方案也很好。 =)

好的,O_NONBLOCK解决了阻塞问题,并且select在战后有效,以下代码在我的系统上运行:

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)

所有你需要做的就是在管道关闭时忽略错误......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM