Spaces:
Runtime error
Runtime error
import gradio | |
import subprocess | |
import re | |
# def extract_class_name(java_code): | |
# match = re.search(r'class\s+(\w+)\s*\{', java_code) | |
# if match: | |
# return match.group(1) | |
# return None | |
def run_command(command): | |
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
output, error = process.communicate() | |
if process.returncode == 0: | |
result = output.decode('utf-8') | |
return result | |
else: | |
result = error.decode('utf-8') | |
return result | |
def run_code(command): | |
print(command) | |
if command is not None: | |
code = command.split('@')[0] | |
lang = command.split('@')[1] | |
if lang == 'python': | |
try: | |
with open('program.py', 'w') as f: | |
f.write(code) | |
command = f"python program.py" | |
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
output, error = process.communicate() | |
if process.returncode == 0: | |
result = output.decode('utf-8') | |
else: | |
result = error.decode('utf-8') | |
except subprocess.CalledProcessError as e: | |
result = str(e) | |
elif lang == 'java': | |
# class_name = extract_class_name(code) | |
class_name = 'main' | |
try: | |
with open(f'{class_name}.java', 'w') as f: | |
f.write(code) | |
compile_command = f"javac {class_name}.java" | |
compile_process = subprocess.Popen(compile_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
compile_output, compile_error = compile_process.communicate() | |
if not class_name: | |
result ='Unable to extract class name from code' | |
elif compile_process.returncode == 0: | |
run_command = f"java {class_name}" | |
run_process = subprocess.Popen(run_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
run_output, run_error = run_process.communicate() | |
if run_process.returncode == 0: | |
result = run_output.decode('utf-8') | |
else: | |
result = run_error.decode('utf-8') | |
else: | |
result = compile_error.decode('utf-8') | |
except subprocess.CalledProcessError as e: | |
result = str(e) | |
elif lang == 'html': | |
result = '' | |
elif lang == 'js': | |
result = 'JS code cannot be executed directly.' | |
elif lang == 'css': | |
result = 'CSS code cannot be executed directly.' | |
elif lang == 'c': | |
try: | |
compile_command = f"gcc -o c_program -x c -" | |
compile_process = subprocess.Popen(compile_command, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
compile_output, compile_error = compile_process.communicate(input=code.encode('utf-8')) | |
if compile_process.returncode == 0: | |
run_command = f"./c_program" | |
run_process = subprocess.Popen(run_command, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
run_output, run_error = run_process.communicate() | |
if run_process.returncode == 0: | |
result = run_output.decode('utf-8') | |
else: | |
result = run_error.decode('utf-8') | |
else: | |
result = compile_error.decode('utf-8') | |
except subprocess.CalledProcessError as e: | |
result = str(e) | |
elif lang == 'cpp': | |
try: | |
compile_command = f"g++ -o cpp_program -x c++ -" | |
compile_process = subprocess.Popen(compile_command, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
compile_output, compile_error = compile_process.communicate(input=code.encode('utf-8')) | |
if compile_process.returncode == 0: | |
run_command = f"./cpp_program" | |
run_process = subprocess.Popen(run_command, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
run_output, run_error = run_process.communicate() | |
if run_process.returncode == 0: | |
result = run_output.decode('utf-8') | |
else: | |
result = run_error.decode('utf-8') | |
else: | |
result = compile_error.decode('utf-8') | |
except subprocess.CalledProcessError as e: | |
result = str(e) | |
elif lang == 'csharp': | |
try: | |
with open('Program.cs', 'w') as f: | |
f.write(code) | |
compile_command = f"csc Program.cs" | |
compile_process = subprocess.Popen(compile_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
compile_output, compile_error = compile_process.communicate() | |
if compile_process.returncode == 0: | |
run_command = f"mono Program.exe" | |
run_process = subprocess.Popen(run_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
run_output, run_error = run_process.communicate() | |
if run_process.returncode == 0: | |
result = run_output.decode('utf-8') | |
else: | |
result = run_error.decode('utf-8') | |
else: | |
result = compile_error.decode('utf-8') | |
except subprocess.CalledProcessError as e: | |
result = str(e) | |
elif lang == 'r': | |
try: | |
with open('script.R', 'w') as f: | |
f.write(code) | |
run_command = f"Rscript script.R" | |
run_process = subprocess.Popen(run_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
run_output, run_error = run_process.communicate() | |
if run_process.returncode == 0: | |
result = run_output.decode('utf-8') | |
else: | |
result = run_error.decode('utf-8') | |
except subprocess.CalledProcessError as e: | |
result = str(e) | |
elif lang == 'php': | |
try: | |
with open('script.php', 'w') as f: | |
f.write(code) | |
run_command = f"php script.php" | |
run_process = subprocess.Popen(run_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
run_output, run_error = run_process.communicate() | |
if run_process.returncode == 0: | |
result = run_output.decode('utf-8') | |
else: | |
result = run_error.decode('utf-8') | |
except subprocess.CalledProcessError as e: | |
result = str(e) | |
elif lang == 'nodejs': | |
try: | |
with open('script.js', 'w') as f: | |
f.write(code) | |
run_command = f"node script.js" | |
run_process = subprocess.Popen(run_command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) | |
run_output, run_error = run_process.communicate() | |
if run_process.returncode == 0: | |
result = run_output.decode('utf-8') | |
else: | |
result = run_error.decode('utf-8') | |
except subprocess.CalledProcessError as e: | |
result = str(e) | |
else: | |
result = 'Language not supported yet.' | |
return result | |
# gradio_interface1 = gradio.Interface( | |
# fn=run_code, | |
# inputs="text", | |
# outputs="text", | |
# title="REST API ", | |
# description="This is an AI powered languages API ", | |
# article="" | |
# ) | |
# gradio_interface2 = gradio.Interface( | |
# fn=run_command, | |
# inputs="text", | |
# outputs="text", | |
# title="REST API ", | |
# description="This is an AI powered command REST API ", | |
# article="" | |
# ) | |
# gradio_interface1.launch() | |
# gradio_interface2.launch() | |
with gradio.Blocks() as demo: | |
gradio.Markdown("run command or run code.") | |
with gradio.Tab("run command"): | |
command_input = gradio.Textbox() | |
command_output = gradio.Textbox() | |
command_button = gradio.Button("submit command") | |
with gradio.Tab("run code"): | |
with gradio.Row(): | |
code_input = gradio.Textbox() | |
code_output = gradio.Textbox() | |
code_button = gradio.Button("submit code@lanuage") | |
command_button.click(run_command, inputs=command_input, outputs=command_output,api_name='command') | |
code_button.click(run_code, inputs=code_input, outputs=code_output,api_name='code') | |
if __name__ == "__main__": | |
demo.launch() | |