zeronet.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #!/usr/bin/env python2.7
  2. # Included modules
  3. import os
  4. import sys
  5. def main():
  6. print "- Starting ZeroNet..."
  7. main = None
  8. try:
  9. app_dir = os.path.dirname(os.path.abspath(__file__))
  10. os.chdir(app_dir) # Change working dir to zeronet.py dir
  11. sys.path.insert(0, os.path.join(app_dir, "src/lib")) # External liblary directory
  12. sys.path.insert(0, os.path.join(app_dir, "src")) # Imports relative to src
  13. import main
  14. main.start()
  15. if main.update_after_shutdown: # Updater
  16. import gc
  17. import update
  18. import atexit
  19. # Try cleanup openssl
  20. try:
  21. if "lib.opensslVerify" in sys.modules:
  22. sys.modules["lib.opensslVerify"].opensslVerify.closeLibrary()
  23. except Exception, err:
  24. print "Error closing opensslVerify lib", err
  25. try:
  26. if "lib.pyelliptic" in sys.modules:
  27. sys.modules["lib.pyelliptic"].openssl.closeLibrary()
  28. except Exception, err:
  29. print "Error closing pyelliptic lib", err
  30. # Close lock file
  31. sys.modules["main"].lock.close()
  32. # Update
  33. try:
  34. update.update()
  35. except Exception, err:
  36. print "Update error: %s" % err
  37. # Close log files
  38. logger = sys.modules["main"].logging.getLogger()
  39. for handler in logger.handlers[:]:
  40. handler.flush()
  41. handler.close()
  42. logger.removeHandler(handler)
  43. atexit._run_exitfuncs()
  44. except Exception, err: # Prevent closing
  45. import traceback
  46. try:
  47. import logging
  48. logging.exception("Unhandled exception: %s" % err)
  49. except Exception, log_err:
  50. print "Failed to log error:", log_err
  51. traceback.print_exc()
  52. from Config import config
  53. traceback.print_exc(file=open(config.log_dir + "/error.log", "a"))
  54. if main and main.update_after_shutdown: # Updater
  55. # Restart
  56. gc.collect() # Garbage collect
  57. print "Restarting..."
  58. import time
  59. time.sleep(1) # Wait files to close
  60. args = sys.argv[:]
  61. sys.executable = sys.executable.replace(".pkg", "") # Frozen mac fix
  62. if not getattr(sys, 'frozen', False):
  63. args.insert(0, sys.executable)
  64. if sys.platform == 'win32':
  65. args = ['"%s"' % arg for arg in args]
  66. try:
  67. print "Executing %s %s" % (sys.executable, args)
  68. os.execv(sys.executable, args)
  69. except Exception, err:
  70. print "Execv error: %s" % err
  71. print "Bye."
  72. if __name__ == '__main__':
  73. main()