2014-10-30 74 views
0

我需要定期从PHP-FPM中提取状态信息。目前,我只是分析下面的脚本输出:Python:模拟“cgi-fcgi”程序的功能

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的监听器直接访问;这就是我要找的)

+0

的可能重复的[Python中的fastcgi客户](http://stackoverflow.com/questions/6801673/python-fastcgi-client) – pepoluan 2014-11-03 05:23:26

回答

0

我评选为this question重复。

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

  1. 我使用flup(即flup.client.fcgi_app
  2. 修改在链接的问题,就像做了修改fcgi_app模块,但我使用了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...