【问题标题】:Python: emulate the functionality of "cgi-fcgi" programPython:模拟“cgi-fcgi”程序的功能
【发布时间】:2014-10-30 03:33:20
【问题描述】:

我需要定期从 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。

那么,我如何在 Python 上实现 CGI/FastCGI“客户端”?

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

【问题讨论】:

标签: python cgi fastcgi


【解决方案1】:

我已投票支持this question

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

  1. 我使用来自flup 的修改后的fcgi_app 模块(即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...
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-17
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 2017-02-12
    相关资源
    最近更新 更多