2014-10-30 75 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...