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

部署在IIS上的Flask应用调用subprocess执行nslookup时触发500错误

Flask部署IIS后subprocess执行nslookup报500错误的解决办法

问题背景

本地运行正常的Flask应用,部署到IIS后触发subprocess.check_output(['nslookup', name])代码段时出现500内部服务器错误,移除该代码后应用可正常运行。相关代码及错误截图如下:

from flask import Flask, request

import subprocess

app = Flask(__name__)

html = '''
<h1>Test</h1>
<h2>Report Generator</h2>
<p>
<form action="/submitted" method="post">
  <label for="reports">Choose a Report:</label>
  <select id="reports" name="reports">
    <option value="user_test">User Test</option>
  </select>
  <input type="submit">
</form>
'''

@app.route("/")
def index():
    return html

@app.route("/submitted", methods=['POST'])
def show():
    select = request.form.get("reports")

    if select == 'user_test':

        name = 'XXXXXXXX.dcm.com'
        result = subprocess.check_output(['nslookup', name])

    else:
        result = "Not Available"
    return result

if __name__ == "__main__":
    app.run()

错误截图

核心原因

  1. IIS应用程序池的运行身份权限不足,无法执行系统级命令nslookup
  2. IIS进程的环境变量未包含nslookup的路径,导致找不到可执行文件

解决步骤

1. 调整应用程序池权限

  • 打开IIS管理器,找到目标应用对应的应用程序池
  • 右键选择「高级设置」,将「标识」改为Local System(测试环境可直接使用,生产环境建议配置权限受限的专用服务账户)
  • 重启应用程序池和对应网站

2. 指定nslookup完整路径

Windows系统中nslookup默认路径为C:\Windows\System32\nslookup.exe,修改subprocess调用代码:

result = subprocess.check_output(['C:\\Windows\\System32\\nslookup.exe', name])

3. 添加异常捕获用于调试

在代码中增加异常捕获逻辑,返回具体错误信息,方便排查问题:

if select == 'user_test':
    name = 'XXXXXXXX.dcm.com'
    try:
        # 捕获标准错误输出,以文本格式返回结果
        result = subprocess.check_output(['nslookup', name], stderr=subprocess.STDOUT, text=True)
    except subprocess.CalledProcessError as e:
        result = f"执行错误: 返回码 {e.returncode}, 输出内容: {e.output}"
    except Exception as e:
        result = f"未知错误: {str(e)}"

内容的提问来源于stack exchange,提问作者David Yang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:35:44