|
|
|
|
|
import gradio as gr |
|
|
import subprocess |
|
|
import shlex |
|
|
|
|
|
def run_command(cmd, history): |
|
|
try: |
|
|
args = shlex.split(cmd) |
|
|
result = subprocess.run(args, capture_output=True, text=True, timeout=10) |
|
|
output = result.stdout or result.stderr |
|
|
except Exception as e: |
|
|
output = str(e) |
|
|
new_history = history + f"> {cmd}\n{output}\n" |
|
|
return new_history, new_history |
|
|
|
|
|
with gr.Blocks() as demo: |
|
|
gr.Markdown("### 🖥️ Simple Web Terminal") |
|
|
history = gr.Textbox(label="Terminal", lines=20, interactive=False) |
|
|
cmd_input = gr.Textbox(label="Command") |
|
|
run_btn = gr.Button("Run") |
|
|
|
|
|
run_btn.click(run_command, inputs=[cmd_input, history], outputs=[history, history]) |
|
|
cmd_input.submit(run_command, inputs=[cmd_input, history], outputs=[history, history]) |
|
|
|
|
|
demo.launch() |
|
|
|