您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

66 行
2.1KB

  1. import os
  2. import exec_helpers
  3. from flask import request, url_for
  4. from flask_api import FlaskAPI, status, exceptions
  5. from flask_cors import CORS
  6. app = FlaskAPI(__name__)
  7. CORS(app)
  8. @app.route("/compile", methods=['POST'])
  9. def compile():
  10. if request.method == 'POST':
  11. note = str(request.data.get('source', ''))
  12. with open("/tmp/test.cpp", "w") as f:
  13. f.write(note)
  14. f.close()
  15. stdout = ''
  16. stderr = ''
  17. retcode = 0
  18. output = ''
  19. cmd = "/opt/cheerp/bin/clang -cheerp-no-type-optimizer -cheerp-pretty-code -cheerp-no-native-math -cheerp-no-math-imul -cheerp-no-math-fround -O3 -target cheerp /tmp/test.cpp -o /tmp/test.js"
  20. # cmd = "sleep 10; echo 123"
  21. # try:
  22. # stdout = subprocess.check_output(cmd, stderr=subprocess.STDOUT, timeout=2, shell=True)
  23. # stdout = stdout.decode("utf-8")
  24. # except subprocess.TimeoutExpired as e:
  25. # stderr = e.output.decode("utf-8")
  26. # print(stderr)
  27. # except subprocess.CalledProcessError as e:
  28. # print(e)
  29. # ret = e.returncode
  30. # stderr = e.output.decode("utf-8")
  31. with exec_helpers.Subprocess() as executor:
  32. try:
  33. ret = executor.check_call(cmd, shell=True, timeout=2)
  34. if ret:
  35. retcode = ret.exit_code
  36. output = ret.stdout_str
  37. except exec_helpers.ExecHelperTimeoutError as e:
  38. #stdout = e.stdout
  39. #stderr = e.stderr
  40. stderr = str(e)
  41. except exec_helpers.CalledProcessError as e:
  42. stdout = e.stdout
  43. stderr = e.stderr
  44. if os.path.exists("/tmp/test.js"):
  45. with open("/tmp/test.js", "r") as f:
  46. output = f.read()
  47. f.close()
  48. return {
  49. 'stdout': stdout,
  50. 'stderr': stderr,
  51. 'retcode': retcode,
  52. 'javascript': output
  53. }, status.HTTP_201_CREATED
  54. if __name__ == "__main__":
  55. app.run(host="0.0.0.0", debug=True)