Executing the java program using Python/Go is much easier than executing the java program in another java program.
Demo:
Visit util.codes wesbite for the live demo.
Executing Java Program using Python:
Here is the core logic to execute the java program using python: (app.py)
from subprocess import Popen, PIPE
import os, errno, subprocess
filename = 'UtilCodes.java'
try:
os.remove('UtilCodes.java')
except OSError as e:
print(e)
pass
f = open("UtilCodes.java", "a")
f.write("import java.time.*;\npublic class UtilCodes {\n\tpublic static void main(String[] args){\n\t\tSystem.out.println( getTodayISTDate() );\n\t}\n\tpublic static LocalDateTime getTodayISTDate() {\n\t\tLocalDateTime localNow = LocalDateTime.now(); \n\t\tZonedDateTime zonedUTC = localNow.atZone(ZoneId.of(\"UTC\"));\n\t\tZonedDateTime zonedIST = zonedUTC.withZoneSameInstant(ZoneId.of(\"Asia/Kolkata\"));\n\t\treturn localNow.now(ZoneId.from(zonedIST));\n\t}\n}")
f.close()
p = Popen('sudo javac UtilCodes.java',stdout=PIPE, stderr=PIPE, shell=True)
output, error = p.communicate()
if p.returncode != 0:
return error
output = subprocess.check_output("sudo java UtilCodes", stderr=subprocess.PIPE, shell=True)
return output.decode("utf-8")
python3.8 app.py // you get the output as the current timestamp as per the above java code
Python Flask RESTAPI to execute Java Program using Python:
REST API Endpoing with python flask to execute the above core logic through the cusom REST API, here request_data contains java source code in the program key.
from flask import Flask, render_template, request, jsonify, redirect, url_for
from pymongo import MongoClient
from bson.json_util import dumps
from subprocess import Popen, PIPE
import os, errno, subprocess
@app.route('/execute', methods=['POST'])
@cross_origin()
def execute():
request_data = request.get_json()
filename = 'UtilCodes.java'
try:
os.remove('UtilCodes.java')
except OSError as e:
print(e)
pass
f = open("UtilCodes.java", "a")
f.write(request_data['program'])
f.close()
p = Popen('sudo javac UtilCodes.java',stdout=PIPE, stderr=PIPE, shell=True)
output, error = p.communicate()
if p.returncode != 0:
return error
output = subprocess.check_output("sudo java UtilCodes", stderr=subprocess.PIPE, shell=True)
return output.decode("utf-8")
Sample Request:
{
"program":"import java.time.*;\npublic class UtilCodes {\n\tpublic static void main(String[] args){\n\t\tSystem.out.println( getTodayISTDate() );\n\t}\n\tpublic static LocalDateTime getTodayISTDate() {\n\t\tLocalDateTime localNow = LocalDateTime.now(); \n\t\tZonedDateTime zonedUTC = localNow.atZone(ZoneId.of(\"UTC\"));\n\t\tZonedDateTime zonedIST = zonedUTC.withZoneSameInstant(ZoneId.of(\"Asia/Kolkata\"));\n\t\treturn localNow.now(ZoneId.from(zonedIST));\n\t}\n}"
}
Output returns the java compilation error if any or the current timestamp.