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

通过HTML按钮运行Django外Python脚本报错:sys无execute属性

问题解决:通过Django按钮运行Python脚本的错误修复

核心错误原因

module 'sys' has no attribute 'execute' 是因为sys模块根本不存在execute属性,你需要用sys.executable来获取当前Python解释器的绝对路径,以此来运行外部脚本。

分步修复代码

1. 修改views.py

修正sys属性错误、字典语法问题,并完善脚本输出捕获:

from subprocess import run, PIPE
from django.shortcuts import render
import sys

def external(request):
    # 使用sys.executable获取当前Python解释器路径,确保环境一致
    result = run(
        [sys.executable, '/home/abc/Documents/test.py'],
        shell=False,
        stdout=PIPE,
        stderr=PIPE,
        text=True  # 直接返回字符串格式的输出,无需手动解码
    )
    # 提取脚本的标准输出和错误输出
    output = result.stdout
    error = result.stderr
    print(output, error)
    # 修正上下文字典:Python用单大括号,双大括号是Django模板语法
    return render(request, 'home.html', {'output': output, 'error': error})

2. 修改home.html

移除冲突的onclick属性,添加结果显示区域:

<html>
  <head>
    <title> RUN PYTHON SCRIPT </title>
  </head>

  <body>
    <form action='{% url "external" %}' method="post">
      {% csrf_token %}
      <input type="submit" name="btn" value="start analyse" id="toggle1" />
    </form>

    <!-- 显示脚本运行结果 -->
    {% if output %}
      <h3>运行输出:</h3>
      <pre>{{ output }}</pre>
    {% endif %}
    
    {% if error %}
      <h3>错误信息:</h3>
      <pre style="color: red;">{{ error }}</pre>
    {% endif %}
  </body>
</html>

3. urls.py保持不变

path('external/', views.external, name="external"),

关键修改说明

  • 替换sys.execute为sys.executable:这是当前Python环境的解释器路径,能保证调用的是和Django运行环境一致的Python,避免环境差异问题。
  • 移除onclick属性:表单的submit按钮已经会触发POST请求到指定URL,onclick的GET跳转会干扰正常提交,导致请求方式冲突。
  • 捕获错误输出:添加stderr=PIPE可以获取脚本运行时的错误信息,方便调试;text=True简化输出解码流程。
  • 修正上下文字典:Python代码中传递模板上下文要用单大括号,双大括号是Django模板中渲染变量的语法,之前的写法会导致语法错误。

内容的提问来源于stack exchange,提问作者ahsan yazdani

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 09:50:32