Standalone USB Web Server and Python Interpeter

Shane Geiger sgeiger at ncee.net
Wed Dec 5 03:31:01 EST 2007


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
sgeiger at ncee.net  |  402-438-8958  |  http://www.ncee.net

Leading the Campaign for Economic and Financial Literacy


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 257 bytes
Desc: OpenPGP digital signature
URL: <http://mail.python.org/pipermail/python-list/attachments/20071205/cac1b659/attachment.sig>


More information about the Python-list mailing list