_unpickler.py 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import sys
  2. sys.dont_write_bytecode = True
  3. import argparse
  4. import base64
  5. try:
  6. import cPickle as pickle
  7. except Exception:
  8. import pickle
  9. import _common as common
  10. def main():
  11. parser = argparse.ArgumentParser()
  12. parser.add_argument('--data', help='pickled object of TCustomCommand class', required=True)
  13. parser.add_argument('--src-root', help='$S real path', required=True)
  14. parser.add_argument('--build-root', help='$B real path', required=True)
  15. parser.add_argument('--tools', help='binaries needed by command', required=True, nargs='+')
  16. args, unknown_args = parser.parse_known_args()
  17. encoded_cmd = args.data
  18. src_root = args.src_root
  19. build_root = args.build_root
  20. tools = args.tools
  21. assert (int(tools[0]) == len(tools[1:])), "tools quantity != tools number!"
  22. cmd_object = pickle.loads(base64.b64decode(encoded_cmd))
  23. cmd_object.set_source_root(src_root)
  24. cmd_object.set_build_root(build_root)
  25. if len(tools[1:]) == 0:
  26. cmd_object.run(unknown_args, common.get_interpreter_path())
  27. else:
  28. cmd_object.run(unknown_args, *tools[1:])
  29. if __name__ == '__main__':
  30. main()