import socket from multiprocessing import Process from time import sleep from flask import Flask PORT = 9004 print 'Opening web server' class Browser(object): def __init__(self, webrender=None, widget_toolkit=None): self.webrender = webrender self.widget_toolkit = widget_toolkit def start(self): view = self.webrender.WebView() sw = self.widget_toolkit.ScrolledWindow() sw.add(view) win = self.widget_toolkit.Window(self.widget_toolkit.WINDOW_TOPLEVEL) win.add(sw) win.show_all() view.open('/') win.fullscreen() self.widget_toolkit.main() class WebServer(object): def start(self): self.p = Process(target=self._start) self.p.start() try: retry = 0 while not self.is_alive(): if retry == 5: raise Exception("Webserver start failed") retry += 1 sleep(1) finally: self.stop() def is_alive(self): res = False try: s = socket.socket() s.connect(("localhost", PORT)) res = True except socket.error: pass finally: s.close() return res def stop(self): self.p.terminate() def _start(self): webserver = Flask("API server") webserver.run('localhost', PORT) if __name__ == '__main__': print "Opening browser"