Standalone USB Web Server and Python Interpeter

mcl mcl.office at googlemail.com
Wed Dec 5 05:30:47 EST 2007


On 5 Dec, 08:31, Shane Geiger <sgei... at ncee.net> wrote:
> mcl wrote:
> > I would like to have a USB pen drive, which can execute python scripts
> > including CGI versions, which I can take to any Windows PC and run
> > without having to install anything on the PC.
>
> > My days of hacking are past so I am looking for something very simple.
>
> > I would envisage a batch file which would ask if the USB web server
> > needed to be started or just python scripts and it would return the IP
> > address of the server or even some local host name such as 'bobserver'
> > which I could give it.
>
> > I need v2.3 python.
>
> > Is this possible
>
> > Thanks
>
> > Richard
>
> To the best of my knowledge you should be squared away if you have
> Movable Python and the script below.  Let me know whether it works for
> you.  (You might have to adjust the path somewhat.)
>
> Movable Python:  http://www.voidspace.org.uk/python/movpy/
>
> #!/usr/bin/python
>
> """
> The CGIHTTPServer module
> This is a simple HTTP server that can call external scripts through the
> common gateway interface
> (CGI).
> Example: Using the CGIHTTPServer module
> # File:cgihttpserver-example-1.py
>
> If you are reading this, you have all the source code necessary to run
> your own Web server.
> Run this with Python.
>
> Note:  This script allows symlinks to places outside the document root.
>
> """
> try:
>     from mywebserver_config import *
> except:
>     print "No mywebserver_config module found.  Using defaults."
>     pass
>
> import CGIHTTPServer
> import BaseHTTPServer
> class Handler(CGIHTTPServer.CGIHTTPRequestHandler):
>     cgi_directories = ["/cgi"]
>
> def writefile(f, data, perms=750): open(f, 'w').write(data) and
> os.chmod(f, perms)
> def readfile(f): return open(f, 'r').read()
>
> html_template = """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
> Transitional//EN">
> <HTML>
> <HEAD>
>   <TITLE>temp</Title>
> </HEAD>
> <BODY>
>
> <H1 ALIGN="CENTER">Temporary Server</H1>
> This is a temporary server.  Do not expect to have access to this
> indefinitely.  This is likely running on my laptop.
> </BODY>
> </HTML>
> """
>
> index2_html = """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0
> Transitional//EN">
> <HTML>
> <HEAD>
>   <TITLE></Title>
> </HEAD>
> <BODY>
>
> <H1 ALIGN="CENTER">CGI scripts</H1>
> <a href="cgi/test.py">cgi/test.py</a><br>
> </BODY>
> </HTML>
> """
>
> example_cgi = """#!/usr/bin/python
>
> # Required header that tells the browser how to render the text.
> print "Content-Type: text/html\\n\\n"
>
> # Print a simple message to the display window.
> print "Hello, World!\\n"
>
> print "<p>What follows are some files in the CGI directory:<p>"
> import commands
> output = commands.getoutput('ls -1 cgi/').splitlines()
> for item in output:
>     print "<a href=",
>     print item,
>     print ">"
>     print item,
>     print "</a>"
>     print "<br>"
>
> """
>
> def readip():
>     """returns your external IP address by querying dyndns.org
>     """
>     import re, urllib
>     f = urllib.urlopen('http://checkip.dyndns.org')
>     s = f.read()
>     m = re.search('([\d]*\.[\d]*\.[\d]*\.[\d]*)', s)
>     return m.group(0)
>
> print "http://"+readip()+":8000/"
>
> import urllib
> import os
>
> originaldir = os.getcwd()
>
> # For safety, changing the document root
> import tempfile, os
> DOCUMENT_ROOT = tempfile.mkdtemp()
> print "DOCUMENT_ROOT: " + DOCUMENT_ROOT
> os.chdir(DOCUMENT_ROOT)
> writefile(DOCUMENT_ROOT+"/README.html",html_template)
>
> #print readfile(originaldir+'/'+__file__)
> writefile(DOCUMENT_ROOT+"/"+os.path.basename(os.getcwd()+'/'+__file__),readfile(originaldir
> +'/'+__file__))  # write a copy of this file
>
> # create a cgi directory
> os.mkdir(DOCUMENT_ROOT+'/cgi')
> writefile(DOCUMENT_ROOT+"/cgi/test.py",example_cgi)
> os.chmod(DOCUMENT_ROOT+"/cgi/test.py",755)
> ### not sure why the previous line doesn't work, but this next
> (os-dependent) line does work (on some OSes):
> os.system('chmod 755 ' + DOCUMENT_ROOT+"/cgi/test.py")
>
> ### INDEX2.HTML
> writefile(DOCUMENT_ROOT+"/index2.html",index2_html)
> os.system('chmod 755 ' + DOCUMENT_ROOT+"/index2.html")
>
> try:
>     os.remove('/tmp/web')  # this path is OS-dependent
>     os.symlink(DOCUMENT_ROOT, '/tmp/web')
>     print "Created symlink /tmp/web"
> except:
>     pass
>
> import os
> os.symlink( "/Users/shanegeiger/Desktop", DOCUMENT_ROOT+'/Desktop' )
> os.symlink( "cgi/test.py", DOCUMENT_ROOT+'/test.py' )
>
> PORT = 8000
> #httpd = BaseHTTPServer.HTTPServer(("", PORT), Handler)
> #httpd = BaseHTTPServer.HTTPServer(("10.37.129.2", PORT), Handler)
> httpd = BaseHTTPServer.HTTPServer(("0.0.0.0", PORT), Handler)
>
> print "serving at port", PORT
> httpd.serve_forever()
>
> --
> Shane Geiger
> IT Director
> National Council on Economic Education
> sgei... at ncee.net  |  402-438-8958  |  http://www.ncee.net
>
> Leading the Campaign for Economic and Financial Literacy
>
>  signature.asc
> 1KDownload

Shane,

WOW

Thank you for the very detailed reply.

I will try to get it working and let you know how I get on.

Richard



More information about the Python-list mailing list