Python:模拟“cgi-fcgi”程序的功能

时间:2014-10-30 03:33:21

标签: python cgi fastcgi

我需要定期从PHP-FPM中提取状态信息。目前我只是解析以下脚本的输出:

export SCRIPT_NAME=/status
export SCRIPT_FILENAME=/status
export REQUEST_METHOD=GET
/usr/bin/cgi-fcgi -bind -connect /tmp/php5-fpm.sock

但是,如果可能的话,我希望我的Python程序能够自己实现cgi-fcgi内容。

我已经尝试过搜索Python如何调用CGI / FastCGI;不幸的是,我发现的所有文档总是谈论如何通过CGI / FastCGI调用Python程序。也就是说,'服务器上的Python'侧。

那么,我该如何实现CGI / FastCGI'客户端'在Python?

(请注意,cgi-fcgi允许直接访问CGI / FastCGI监听器;这就是我正在寻找的东西)

1 个答案:

答案 0 :(得分:0)

我已被选为this question的副本。

不过,我想记录我的解决方案:

  1. 我使用fcgi_app中经过修改的flup模块(即 flup.client.fcgi_app
  2. 在链接问题中进行了修改,但我使用了预先制作的'来自this Gist on GitHub的解决方案。它很简单,并且它似乎没有标准模块之外的任何依赖。
  3. 调用简单如下:

    # "flup_fcgi_client.py" is the modified flup.client.fcgi_app module
    # located in the same directory
    import flup_fcgi_client as fcgi_client
    fcgi = fcgi_client.FCGIApp(connect='/path/to/socket')
    script = '/status'
    query = 'json'
    env = {
        'SCRIPT_NAME': script,
        'SCRIPT_FILENAME': script,
        'QUERY_STRING': query,
        'REQUEST_METHOD': 'GET'}
    
    code, headers, out, err = fcgi(env)
    
    # Handle return values here...