在
Linux上运行Lighttpd,我希望能够像执行
PHP脚本一样执行
Python脚本.
目标是能够执行存储在WWW目录中的任意脚本文件,例如,http://www.example.com/*.py.
>我不想为每个请求生成一个新的Python实例(解释器)(比如在常规CGI中完成,如果我没有弄错的话),这就是我使用FastCGI的原因.
>在Lighttpd’s documentation之后,以下是我的配置文件的FastCGI部分.问题是它始终为每个* .py文件运行/usr/local / bin / python-fcgi脚本,而不管该文件的内容如何:
http://www.example.com/script.py [output =>]“python-fcgi:test”
(不论script.py的内容如何)
>我对使用任何框架都不感兴趣,只是执行单个[web]脚本.
如何让它像PHP一样,通过请求它的路径执行WWW目录中的任何脚本?
/etc/lighttpd/conf.d/fastcgi.conf:
server.modules += ( "mod_fastcgi" ) index-file.names += ( "index.PHP" ) fastcgi.server = ( ".PHP" => ( "localhost" => ( "bin-path" => "/usr/bin/php-cgi","socket" => "/var/run/lighttpd/PHP-fastcgi.sock","max-procs" => 4,# default value "bin-environment" => ( "PHP_FCGI_CHILDREN" => "1",# default value ),"broken-scriptfilename" => "enable" ) ),".py" => ( "python-fcgi" => ( "socket" => "/var/run/lighttpd/fastcgi.python.socket","bin-path" => "/usr/local/bin/python-fcgi","check-local" => "disable","max-procs" => 1,) ) )
在/usr/local / bin目录/蟒蛇-FCGI:
#!/usr/bin/python2 def myapp(environ,start_response): start_response('200 OK',[('Content-Type','text/plain')]) return ['python-fcgi: test\n'] if __name__ == '__main__': from flup.server.fcgi import WSGIServer WSGIServer(myapp).run()
解决方法
构建PHP(FastCGI)解释器以这种方式运行PHP文件;即它运行一个脚本,然后忘记它的所有内部状态,然后重新开始.
Python不是为此而构建的.
您可以尝试在flup之上构建解决方案;您将__import__
请求的脚本并在其中调用“handleRequest”函数或类似.
您可以“重新加载”模块来更新它:https://stackoverflow.com/questions/437589/how-do-i-unload-reload-a-python-module
但是你无法卸载模块,因此内存使用量会增长:https://stackoverflow.com/questions/3105801/unload-a-module-in-python