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

时间:2016-03-31 21:27:41

标签: python linux sockets select named-pipes

我需要同时使用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 ...现成的解决方案也很好。 =)

1 个答案:

答案 0 :(得分:0)

好的,O_NONBLOCK解决了阻塞问题,并且选择后续工作,以下代码在我的系统上运行:

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)

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