Create code editor and run code with subprocess package
This commit is contained in:
52
webpages/code_editor.py
Normal file
52
webpages/code_editor.py
Normal file
@@ -0,0 +1,52 @@
|
||||
# [TBD] Once the code editor works in the texting page, move it here
|
||||
import streamlit as st
|
||||
import subprocess
|
||||
from streamlit_ace import st_ace
|
||||
|
||||
|
||||
def code_editor(height="300px", sample_code = "", editor_label = "",min_lines = 20):
|
||||
with st.container():
|
||||
content = st_ace(
|
||||
height=height,
|
||||
value= sample_code,
|
||||
placeholder="Put the code here and click 'APPLY' to run",
|
||||
language= "python",
|
||||
theme="github",
|
||||
font_size= 15,
|
||||
tab_size=4,
|
||||
show_gutter=True, # line number
|
||||
min_lines=min_lines,
|
||||
key=editor_label, #lable of the code editor
|
||||
|
||||
# show_print_margin=c2.checkbox("Show print margin", value=False),
|
||||
# wrap=c2.checkbox("Wrap enabled", value=False),
|
||||
# auto_update=c2.checkbox("Auto update", value=False),
|
||||
# readonly=c2.checkbox("Read-only", value=False),
|
||||
# keybinding=c2.selectbox("Keybinding mode", options=KEYBINDINGS, index=3),
|
||||
|
||||
|
||||
)
|
||||
|
||||
if content:
|
||||
with open("./webpages/input_code.py", "w") as f:
|
||||
f.write(content)
|
||||
|
||||
try:
|
||||
result = subprocess.run(
|
||||
["python", "./webpages/input_code.py"], # Command to execute
|
||||
capture_output=True, # Capture both stdout and stderr
|
||||
text=True, # Ensure the output is returned as a string
|
||||
timeout=10 # Timeout after 10 seconds
|
||||
)
|
||||
# Check if the process encountered an error (non-zero exit code)
|
||||
if result.returncode != 0:
|
||||
st.error("Error:\t"+ result.stderr) # Print the error details from code.py
|
||||
else:
|
||||
st.success("**Code Output:**")
|
||||
st.text(result.stdout) # Print the normal output if no errors
|
||||
|
||||
except subprocess.TimeoutExpired:
|
||||
# Handle case where the process runs for too long
|
||||
st.exception("The code took too long to execute and was terminated.")
|
||||
st.divider()
|
||||
|
||||
Reference in New Issue
Block a user