CodeInterpreter / app.py
awacke1's picture
Create app.py
ce2c075 verified
raw
history blame
3.36 kB
import streamlit as st
import io
import sys
from contextlib import redirect_stdout
import re
import mistune
def extract_python_code(markdown_text):
"""Extract Python code blocks from markdown text."""
pattern = r"```python\s*(.*?)\s*```"
matches = re.findall(pattern, markdown_text, re.DOTALL)
return matches
def execute_code(code):
"""Execute Python code and return the output."""
# Create string buffer to capture output
buffer = io.StringIO()
# Create a dictionary for local variables
local_vars = {}
try:
# Redirect stdout to our buffer
with redirect_stdout(buffer):
# Execute the code
exec(code, {}, local_vars)
# Get the output
output = buffer.getvalue()
return output, None
except Exception as e:
return None, str(e)
finally:
buffer.close()
def main():
st.set_page_config(page_title="Python Code Executor", layout="wide")
st.title("📝 Python Code Executor")
st.markdown("Enter Python code directly or upload a .py/.md file")
# File uploader
uploaded_file = st.file_uploader("Upload a Python (.py) or Markdown (.md) file",
type=['py', 'md'])
# Code input area
if uploaded_file is None:
code = st.text_area("Or enter your Python code here:",
height=200,
placeholder="Enter your Python code...")
else:
content = uploaded_file.getvalue().decode()
if uploaded_file.type == "text/markdown":
# Extract Python code from markdown
code_blocks = extract_python_code(content)
if code_blocks:
code = code_blocks[0] # Use the first Python code block found
else:
st.error("No Python code blocks found in the markdown file!")
return
else:
# Assume it's a Python file
code = content
st.code(code, language='python')
# Execute button
if st.button("▶️ Run Code"):
if code:
st.markdown("### Output:")
output, error = execute_code(code)
if error:
st.error(f"Error:\n{error}")
elif output:
st.code(output)
else:
st.info("Code executed successfully with no output.")
else:
st.warning("Please enter some code to execute!")
# Add some usage information
with st.expander("ℹ️ How to use"):
st.markdown("""
1. Either upload a Python (.py) or Markdown (.md) file containing Python code
2. Or enter Python code directly in the text area
3. Click the 'Run Code' button to execute
**Note:** For markdown files, the code should be in Python code blocks like:
````
```python
print("Hello World!")
```
````
""")
# Add safety information
with st.expander("⚠️ Safety Notice"):
st.markdown("""
- The code executor runs in a restricted environment
- Some operations may be limited for security reasons
- Be careful when executing code from unknown sources
""")
if __name__ == "__main__":
main()