#!/usr/bin/python import os, sys, time import BaseHTTPServer import popen2 HOST_NAME = '' PORT_NUMBER = 9000 CMD='echo' class WebHandler(BaseHTTPServer.BaseHTTPRequestHandler): def init(cls, cmd): WebHandler.cmd=cmd init = classmethod(init) def do_GET(self): """Respond to a GET request.""" self.send_response(200) self.end_headers() (slash, _cmd_, args)=self.partition(self.path,self.cmd) if _cmd_ != self.cmd: self.wfile.write("Not implemented") return args=[s for s in args.split('+') if s] pstdout,pstdin = popen2.popen2([self.cmd]+args) #p = Popen([self.cmd]+args, stdin=PIPE, stdout=PIPE) if "content-length" in self.headers: pstdin.write(self.rfile.read(int(self.headers["content-length"]))) pstdin.close() self.wfile.write(pstdout.read()) pstdout.flush() pstdout.close() def partition(self, str, p): index=str.find(p) if index < 0: return (str, '', '') else: list=str.split(p,1) return (list[0],p,list[1]) do_POST = do_GET def usage(): print ''' to_web.py -p CMD''' sys.exit(0) if __name__ == '__main__': server_class = BaseHTTPServer.HTTPServer if len(sys.argv) == 1: usage() elif len(sys.argv) == 2: CMD=sys.argv[1] elif len(sys.argv) == 3: CMD=sys.argv[2] if sys.argv[1].startswith("-p"): PORT_NUMBER=int(sys.argv[1].split("-p")[1]) else: usage() else: usage() WebHandler.init(CMD) httpd = server_class((HOST_NAME, PORT_NUMBER), WebHandler) print time.asctime(), CMD, "server started - %s" % (PORT_NUMBER) try: httpd.serve_forever() except KeyboardInterrupt: pass httpd.server_close() print time.asctime(), CMD, "server stopped - %s" % (PORT_NUMBER)