As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened,
visit the help center 指导。
8年前关闭。
我想用 Python 编写 fastAGI 脚本。我已经在网上查找了关于此的非常少的文档。到目前为止,我发现有
pyst 、
pyst2 、
starpy 很受欢迎。但问题是,他们甚至缺乏最基本的文档(或者至少我没有找到)。我想知道是否有任何好的资源可以使用现有的任何库开始在 python 中进行 fastAGI 编程,而不是我从头开始重写所有内容。
我还想知道是否还有其他像我提到的那样好的库。
如果什么都没有,我有什么选择?
python中有很多Asterisk Lib可以用来开发FastAGI。一个是由 Neil Tallim 编写的 Pystrix ( http://code.google.com/p/pystrix/ )。这是关于如何开发 FastAgi 服务器的示例。
在您的拨号计划中,您将调用发送到 FastAGI 服务器:
[some-context]
exten => 567567,1,NoOp()
exten => s,n,AGI(agi://host:port/testcall)
exten => s,n,Hangup()
创建一个 FastAgi 服务器来监听/testcall url:
import pystrix
class FastAGIServer(threading.Thread):
_fagi_server = None
def __init__(self):
threading.Thread.__init__(self)
self.daemon = True
self._fagi_server = pystrix.agi.FastAGIServer()
self._fagi_server.register_script_handler(re.compile('testcall'), self._testcall_handler)
self._fagi_server.register_script_handler(None, self._fallback_handler)
def _testcall_handler(self, agi, args, kwargs, match, path):
agi.execute(pystrix.agi.core.Answer())
response = agi.execute(pystrix.agi.core.StreamFile('demo-thanks', escape_digits=('1', '2')))
agi.execute(pystrix.agi.core.Hangup())
def _fallback_handler(self, agi, args, kwargs, match, path):
# Do something here
def kill(self):
self._fagi_server.shutdown()
def run(self):
self._fagi_server.serve_forever()
if __name__ == '__main__':
fastagi_core = FastAGIServer()
fastagi_core.start()
while fastagi_core.is_alive():
time.sleep(1)
fastagi_core.kill()
如果你知道的话,它就像 CGI。
以上代码复制自 Pystrix fastagi 示例页面 。请引用那里阅读内嵌评论。此外,文档还不是很好,但代码干净、简洁且易于理解。只需跳入它并进行实验。
如果您使用的是
FreePBX/Elastix 发行版,您可以为
[from-pstn] 编写拨号计划,然后在
7777 上测试调用以使其执行。
对于大型应用程序,您可以从 Django 的 URL 映射中获取一些灵感并在此处实现它。