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

2024-09-28 21:56:07 发布

您现在位置:Python中文网/ 问答频道 /正文

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

所以,我该怎么理解。。在

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

  • 将请求写入已知的静态FIFO(例如/tmp/request_FIFO)。此请求包括我的响应FIFO的名称

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

  • 此时,open()可能应该取消阻塞,read()将接收数据。但似乎不是这样。它有时有用,但有时不起作用。

  • 写入响应后,Kamailio将关闭我的响应FIFO,这将导致下一次读取()出现EOF。

  • 现在我可以rm临时响应FIFO

我的大脑在尝试用几种不同的方法来做这件事之后,包括穿线,波彭:我是一个“cat<;response_fifo”,甚至尝试使用非阻塞打开和轮询。。在

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

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

有人在Python中有优雅的解决方案吗?在


Tags: rm服务器名称进程responserequestopen命名