Hi, I'm writing a very simple testing framework for my application, the design isn't perfect, but I don't have time to write something more complex.
Essentially, I have a client and server-application, on my server I want a small python web server to start the server application with given test sequences on a GET or POST call. Also, the application prints some testdata to stderr which I'd like to catch and return in another HTTP call. At the moment I have this:
from subprocess import Popen, PIPE
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
p = None
class MyHandler(BaseHTTPRequestHandler):
def do_GET(self):
global p
if self.path.endswith("start/"):
p = Popen(["./bin/Release/simplex264","BBB-360","127.0.0.1"], stderr=PIPE)
print 'started'
return
elif self.path.endswith("getResults/"):
self.wfile.write(p.stderr.read())
return
self.send_error(404,'File Not Found: %s' % self.path)
def main():
try:
server = HTTPServer(('localhost', 9876), MyHandler)
print 'Started server...'
server.serve_forever()
except KeyboardInterrupt:
print 'Shutting down...'
server.socket.close()
if __name__ == '__main__':
main()
Which 'works', except for one part, when I try to open http://localhost:9876/start/, it does not return before the process ended. However, the 'started' appears in my shell immediately (I added this because I thought the Popen call would only return after execution). I do not know the perfect inner workings of Popen and BaseHTTPRequestHandler however and do not really know where it goes wrong. Is there any way to make this work asynchronously?