zeronet.py 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #!/usr/bin/env python3
  2. # Included modules
  3. import os
  4. import sys
  5. def main():
  6. if sys.version_info.major < 3:
  7. print("Error: Python 3.x is required")
  8. sys.exit(0)
  9. if "--silent" not in sys.argv:
  10. print("- Starting ZeroNet...")
  11. main = None
  12. try:
  13. import main
  14. main.start()
  15. except Exception as err: # Prevent closing
  16. import traceback
  17. try:
  18. import logging
  19. logging.exception("Unhandled exception: %s" % err)
  20. except Exception as log_err:
  21. print("Failed to log error:", log_err)
  22. traceback.print_exc()
  23. from Config import config
  24. traceback.print_exc(file=open(config.log_dir + "/error.log", "a"))
  25. if main and (main.update_after_shutdown or main.restart_after_shutdown): # Updater
  26. if main.update_after_shutdown:
  27. import update
  28. update.update()
  29. restart()
  30. else:
  31. print("Restarting...")
  32. restart()
  33. def restart():
  34. if "main" in sys.modules:
  35. import atexit
  36. # Close log files
  37. logger = sys.modules["main"].logging.getLogger()
  38. for handler in logger.handlers[:]:
  39. handler.flush()
  40. handler.close()
  41. logger.removeHandler(handler)
  42. atexit._run_exitfuncs()
  43. import time
  44. time.sleep(1) # Wait files to close
  45. args = sys.argv[:]
  46. sys.executable = sys.executable.replace(".pkg", "") # Frozen mac fix
  47. if not getattr(sys, 'frozen', False):
  48. args.insert(0, sys.executable)
  49. # Don't open browser after restart
  50. if "--open_browser" in args:
  51. del args[args.index("--open_browser") + 1] # argument value
  52. del args[args.index("--open_browser")] # argument key
  53. if getattr(sys, 'frozen', False):
  54. pos_first_arg = 1 # Only the executable
  55. else:
  56. pos_first_arg = 2 # Interpter, .py file path
  57. args.insert(pos_first_arg, "--open_browser")
  58. args.insert(pos_first_arg + 1, "False")
  59. if sys.platform == 'win32':
  60. args = ['"%s"' % arg for arg in args]
  61. try:
  62. print("Executing %s %s" % (sys.executable, args))
  63. os.execv(sys.executable, args)
  64. except Exception as err:
  65. print("Execv error: %s" % err)
  66. print("Bye.")
  67. def start():
  68. app_dir = os.path.dirname(os.path.abspath(__file__))
  69. os.chdir(app_dir) # Change working dir to zeronet.py dir
  70. sys.path.insert(0, os.path.join(app_dir, "src/lib")) # External liblary directory
  71. sys.path.insert(0, os.path.join(app_dir, "src")) # Imports relative to src
  72. if "--update" in sys.argv:
  73. sys.argv.remove("--update")
  74. print("Updating...")
  75. import update
  76. update.update()
  77. else:
  78. main()
  79. if __name__ == '__main__':
  80. start()