使用Python将请求写入一个FIFO并从另一个FIFO读取响应

时间:2013-11-08 15:19:47

标签: python nonblocking mkfifo

我需要在/ tmp中使用名为FIFO的进程(Kamailio SIP服务器)进行通信。它的工作方式是我需要设置一个自己的响应FIFO,然后将请求写入Kamailio,它将把响应写回我的FIFO。

所以,我的理解应该是......

  • mkfifo / tmp中用于接收响应的新临时FIFO。我使用os.getpid()来创建一个唯一的名称,例如/ tmp / response_1234_fifo
  • 尝试打开(fifo,“r”)FIFO并读取()它..但是这将在open()中阻塞,因为没有人打开FIFO进行写入

  • 将请求写入众所周知的静态FIFO(例如/ tmp / request_fifo)。该请求包括我的响应FIFO的名称

  • Kamailio将处理请求,打开我的响应FIFO进行写入并写入()响应。

  • 此时我的open()应该解除阻塞,read()接收数据。但似乎并没有这样做。它有时有效但有时却没有。

  • 写完回复后,Kamailio将关闭我的响应FIFO,这将导致下一次读取的EOF()

  • 现在我可以使用临时响应FIFO

我试图以几种不同的方式完成此操作后关闭我的大脑,包括线程,popen:“cat< response_fifo”,甚至尝试使用非阻塞打开和轮询..

如果我看看用于运行命令的Kamailio shell脚本是如何做到的,那就太简单了,它会让我哭泣:)

    cat < $response_fifo &
    printf "$CMD" > $request_fifo
    wait
    rm $response_fifo

任何人都有一个优雅的Python解决方案吗?

0 个答案:

没有答案