You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何将Python脚本映射至网页实现点击按钮后台运行并展示输出

How to Connect Python Scripts to a Web Interface (Button Trigger + Output Display)

Hey there! Let's break this down step by step—you want users to click a web button to run your Python scripts in the background and see the output right on the page, right? I'll walk you through a practical, beginner-friendly approach using Flask (a lightweight Python web framework) first, then cover some advanced tweaks for longer-running scripts.

Step 1: Set Up Your Project Structure

First, organize your files like this to keep things clean:

script_runner/
├── app.py          # Your Flask web app
├── templates/
│   └── index.html  # The web interface
└── scripts/
    └── sample_script.py  # One of your Python scripts

Step 2: Install Dependencies

Open your terminal and install Flask:

pip install flask

Step 3: Write the Flask Backend (app.py)

This code will handle the button click, run your script, and return the output. We'll use subprocess to safely execute the script and capture its output.

from flask import Flask, render_template, request, jsonify
import subprocess
import os

app = Flask(__name__)

# Define the path to your scripts folder
SCRIPTS_DIR = os.path.join(os.path.dirname(__file__), 'scripts')

@app.route('/')
def home():
    return render_template('index.html')

@app.route('/run-script', methods=['POST'])
def run_script():
    # Get the script name from the frontend (we'll pass this via the button)
    script_name = request.json.get('script_name', 'sample_script.py')
    script_path = os.path.join(SCRIPTS_DIR, script_name)

    # Validate the script exists to avoid errors
    if not os.path.exists(script_path):
        return jsonify({'error': f"Script {script_name} not found!"}), 404

    try:
        # Run the script and capture stdout/stderr
        # Use shell=False for security (never use shell=True with untrusted input!)
        result = subprocess.run(
            ['python', script_path],
            capture_output=True,
            text=True,
            timeout=30  # Add a timeout to prevent hanging scripts
        )
        # Return both output and any errors
        return jsonify({
            'output': result.stdout,
            'error': result.stderr
        })
    except subprocess.TimeoutExpired:
        return jsonify({'error': "Script timed out after 30 seconds!"}), 500
    except Exception as e:
        return jsonify({'error': str(e)}), 500

if __name__ == '__main__':
    app.run(debug=True)  # Disable debug in production!

Step 4: Create the Web Interface (templates/index.html)

This page has a button that triggers the script and displays the output without reloading the page (using JavaScript Fetch API):

<!DOCTYPE html>
<html>
<head>
    <title>Python Script Runner</title>
    <style>
        .container { max-width: 800px; margin: 2rem auto; padding: 0 1rem; }
        .output-box { margin-top: 2rem; padding: 1rem; border: 1px solid #ccc; border-radius: 4px; background: #f5f5f5; }
        button { padding: 0.5rem 1rem; font-size: 1rem; cursor: pointer; }
    </style>
</head>
<body>
    <div class="container">
        <h1>Run Your Python Scripts</h1>
        <button id="runScriptBtn">Run Sample Script</button>
        <div class="output-box">
            <h3>Output:</h3>
            <pre id="outputArea"></pre>
            <h3>Errors:</h3>
            <pre id="errorArea" style="color: red;"></pre>
        </div>
    </div>

    <script>
        const runBtn = document.getElementById('runScriptBtn');
        const outputArea = document.getElementById('outputArea');
        const errorArea = document.getElementById('errorArea');

        runBtn.addEventListener('click', async () => {
            // Disable button while script runs
            runBtn.disabled = true;
            runBtn.textContent = 'Running...';
            outputArea.textContent = '';
            errorArea.textContent = '';

            try {
                // Send request to Flask backend
                const response = await fetch('/run-script', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                    },
                    body: JSON.stringify({ script_name: 'sample_script.py' })
                });

                const data = await response.json();

                // Display results
                outputArea.textContent = data.output || 'No output returned';
                errorArea.textContent = data.error || 'No errors';
            } catch (err) {
                errorArea.textContent = `Failed to run script: ${err.message}`;
            } finally {
                // Re-enable button
                runBtn.disabled = false;
                runBtn.textContent = 'Run Sample Script';
            }
        });
    </script>
</body>
</html>

Step 5: Add Your Sample Script (scripts/sample_script.py)

Test with a simple script first to make sure everything works:

print("Hello from the sample script!")
print("This is some output from your Python code.")
# Uncomment to test error handling
# raise ValueError("Oops, an intentional error!")

Step 6: Test It Out

  1. Run python app.py in your terminal
  2. Open your browser and go to http://localhost:5000
  3. Click the button—you should see the script's output show up in the boxes!

Important Notes & Advanced Tweaks

  • Security: Never use shell=True in subprocess if you're handling user input (we avoided that here). Also, restrict which scripts can be run (don't let users specify arbitrary script paths).
  • Long-Running Scripts: If your scripts take more than a few seconds to run, the above synchronous approach will make the browser hang. For this, use an asynchronous task queue like Celery with a broker (e.g., Redis or RabbitMQ). You'd trigger the task, return a task ID, then have the frontend poll for updates or use WebSockets to get real-time results.
  • Production Deployment: When deploying to production, disable Flask's debug mode, use a proper WSGI server (like Gunicorn), and consider adding authentication if only authorized users should run scripts.

内容的提问来源于stack exchange,提问作者sivabala senna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 03:45:41