<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title>朝闻道的“爱学”日志</title>
		<link>http://www.ax.net.cn/</link>
		<description>天道酬勤，唯爱学可成才</description>
		<copyright>Copyright (C) 2004 Security Angel Team [S4T] All Rights Reserved.</copyright>
		<generator>SaBlog-X Version 1.6 Build 20080806</generator>
		<lastBuildDate>Thu, 09 Sep 2010 04:29:12 +0000</lastBuildDate>
		<ttl>30</ttl>
		<item>
			<guid>http://www.ax.net.cn/?action=show&amp;id=358</guid>
			<title>超简单搭建支持python的web服务器</title>
			<author>admin</author>
			<description><![CDATA[<p>超简单搭建支持python的web服务器</p>
<p>web1.py</p>
<div class="codeText">
<div class="codeHead">Python代码</div>
<ol class="dp-py" start="1">
    <li class="alt"><span><span class="comment">#!/usr/bin/python</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;SimpleHTTPServer&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>SimpleHTTPServer.test()&nbsp; <br />
    </span></li>
</ol>
</div>
<p>web2.py</p>
<div class="codeText">
<div class="codeHead">Python代码</div>
<ol class="dp-py" start="1">
    <li class="alt"><span><span class="comment">#!/usr/bin/python</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;SimpleHTTPServer&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;SocketServer&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">import</span><span>&nbsp;os&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>PORT&nbsp;=&nbsp;<span class="number">80</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span>WEBDIR&nbsp;=&nbsp;<span class="string">&quot;f:/python语言学习&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">class</span><span>&nbsp;Handler(SimpleHTTPServer.SimpleHTTPRequestHandler):&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">def</span><span>&nbsp;translate_path(</span><span class="special">self</span><span>,&nbsp;path):&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;os.chdir(WEBDIR)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;SimpleHTTPServer.SimpleHTTPRequestHandler.translate_path(</span><span class="special">self</span><span>,path)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;<span class="keyword">try</span><span>:&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpd&nbsp;=&nbsp;SocketServer.TCPServer((&quot;&quot;,&nbsp;PORT),&nbsp;Handler)&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">print</span><span>&nbsp;</span><span class="string">&quot;dir&nbsp;%s&nbsp;serving&nbsp;at&nbsp;port&nbsp;%s&quot;</span><span>%(repr(WEBDIR),&nbsp;PORT)&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;httpd.serve_forever()&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;<span class="keyword">except</span><span>:</span><span class="keyword">pass</span><span>&nbsp;&nbsp;</span></span></li>
</ol>
</div>
<p>&nbsp;   ds</p>
<p>web3.py , cgi server ,7777端口, 在web3.py执行目录下新建cgi-bin目录 , 在cgi-bin目录写hello.py</p>
<div class="codeText">
<div class="codeHead">Python代码</div>
<ol start="1" class="dp-py">
    <li class="alt"><span><span class="keyword">from</span><span>&nbsp;CGIHTTPServer&nbsp;</span><span class="keyword">import</span><span>&nbsp;CGIHTTPRequestHandler&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">from</span><span>&nbsp;BaseHTTPServer&nbsp;</span><span class="keyword">import</span><span>&nbsp;HTTPServer&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>server_address=(<span class="string">''</span><span>,</span><span class="number">7777</span><span>)&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>httpd&nbsp;=&nbsp;HTTPServer(server_address,&nbsp;CGIHTTPRequestHandler)&nbsp;&nbsp;&nbsp;</span></li>
    <li class="alt"><span>httpd.serve_forever()&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>以下这些是需要安装了 twisted 才能使用的<br />
web4.py</p>
<div class="codeText">
<div class="codeHead">Python代码</div>
<ol start="1" class="dp-py">
    <li class="alt"><span><span class="keyword">from</span><span>&nbsp;twisted.web.resource&nbsp;</span><span class="keyword">import</span><span>&nbsp;Resource&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">from</span><span>&nbsp;twisted.web&nbsp;</span><span class="keyword">import</span><span>&nbsp;server&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">from</span><span>&nbsp;twisted.web&nbsp;</span><span class="keyword">import</span><span>&nbsp;static&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">from</span><span>&nbsp;twisted.internet&nbsp;</span><span class="keyword">import</span><span>&nbsp;reactor&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">class</span><span>&nbsp;ReStructured(&nbsp;Resource&nbsp;):</span></span></li>
    <li class="alt"><span><span class="keyword">&nbsp;&nbsp;&nbsp; def</span><span>&nbsp;__init__(&nbsp;</span><span class="special">self</span><span>,&nbsp;filename,&nbsp;*a&nbsp;):&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="special">self</span><span>.rst&nbsp;=&nbsp;open(&nbsp;filename&nbsp;).read(&nbsp;)</span></span></li>
    <li class=""><span><span class="keyword">&nbsp;&nbsp;&nbsp; def</span><span>&nbsp;render(&nbsp;</span><span class="special">self</span><span>,&nbsp;request&nbsp;):&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="special">self</span><span>.rst</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp; PORT=<span class="number">8888</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp; resource&nbsp;=&nbsp;static.File(<span class="string">'/'</span><span>)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp; resource.processors&nbsp;=&nbsp;{&nbsp;<span class="string">'.html'</span><span>&nbsp;&nbsp;:&nbsp;ReStructured&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp; resource.indexNames&nbsp;=&nbsp;[&nbsp;<span class="string">'index.html'</span><span>]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp; reactor.listenTCP(PORT,server.Site(&nbsp;resource&nbsp;))</span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp; reactor.run(&nbsp;)&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>web5.py, 这是又是支持cgi的，又是需要twisted模块的，也是需要在cgi-bin目录下执行</p>
<div class="codeText">
<div class="codeHead">Python代码</div>
<ol start="1" class="dp-py">
    <li class="alt"><span><span class="comment">#&nbsp;-*-&nbsp;coding:&nbsp;utf-8&nbsp;-*-</span><span>&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">from</span><span>&nbsp;twisted.internet&nbsp;</span><span class="keyword">import</span><span>&nbsp;reactor&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span><span class="keyword">from</span><span>&nbsp;twisted.web&nbsp;</span><span class="keyword">import</span><span>&nbsp;static,&nbsp;server,&nbsp;twcgi&nbsp;&nbsp;</span></span></li>
    <li class=""><span><span class="keyword">from</span><span>&nbsp;twisted.web.resource&nbsp;</span><span class="keyword">import</span><span>&nbsp;Resource&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span><span class="keyword">class</span><span>&nbsp;Collection(Resource):&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">def</span><span>&nbsp;render_GET(</span><span class="special">self</span><span>,&nbsp;request):&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">return</span><span>&nbsp;</span><span class="string">&quot;hello&nbsp;world&nbsp;你好&quot;</span><span>&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span></li>
    <li class=""><span>&nbsp;root&nbsp;=&nbsp;static.File(<span class="string">'./'</span><span>)&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;root.putChild(<span class="string">''</span><span>,&nbsp;Collection())&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;root.putChild(<span class="string">'img'</span><span>,&nbsp;static.File(</span><span class="string">'./img'</span><span>))&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;root.putChild(<span class="string">'cgi-bin'</span><span>,&nbsp;twcgi.CGIDirectory(</span><span class="string">'cgi-bin'</span><span>))&nbsp;&nbsp;</span></span></li>
    <li class=""><span>&nbsp;reactor.listenTCP(<span class="number">80</span><span>,&nbsp;server.Site(root))&nbsp;&nbsp;</span></span></li>
    <li class="alt"><span>&nbsp;reactor.run()&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>当然，想实现复杂功能还是需要自己搞代码的，只不过想惊叹python的模块集成得太多功能了.<br />
python超简单的web服务器。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p><br /><br /><a href="http://www.ax.net.cn/?action=show&amp;id=358" target="_blank">阅读全文</a><br /><br />]]></description>
			<link>http://www.ax.net.cn/?action=show&amp;id=358</link>
			<category domain="http://www.ax.net.cn/?cid=15">python</category>
			<pubDate>2009-11-28 17:15</pubDate>
		</item>
	</channel>
</rss>
