simplehttpserver.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/usr/bin/env python
  2. # coding: utf-8
  3. import six
  4. import socket
  5. from contextlib import closing
  6. import webbrowser
  7. if six.PY2:
  8. import SimpleHTTPServer
  9. import SocketServer
  10. else:
  11. import http.server as SimpleHTTPServer
  12. import socketserver as SocketServer
  13. def is_port_avaiable(port):
  14. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  15. result = sock.connect_ex(('127.0.0.1', port))
  16. return result != 0
  17. def free_port():
  18. if is_port_avaiable(11000):
  19. return 11000
  20. with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s:
  21. s.bind(('', 0))
  22. return s.getsockname()[1]
  23. def main():
  24. PORT = free_port()
  25. Handler = SimpleHTTPServer.SimpleHTTPRequestHandler
  26. httpd = SocketServer.TCPServer(("", PORT), Handler)
  27. # There is a bug that you have to refresh web page so you can see htmlreport
  28. # Even I tried to use threading to delay webbrowser open tab
  29. # but still need to refresh to let report show up.
  30. # I guess this is SimpleHTTPServer bug
  31. webbrowser.open('http://127.0.0.1:%d' % PORT, new=2)
  32. print("serving at port", PORT)
  33. httpd.serve_forever(0.1)
  34. if __name__ == '__main__':
  35. main()