You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Node.js部署Windows服务器后执行Python脚本遇“权限被拒绝(Access Denied)”问题求助

Node.js部署Windows服务器后执行Python脚本遇“权限被拒绝(Access Denied)”问题求助

我正在尝试从Node.js项目中执行一个Python脚本,这个脚本负责读取支付图片的详情,提取出姓名、交易ID、金额和日期。本地运行完全正常,但部署到服务器后,就遇到了**"Access Denied"(权限被拒绝)**的问题——Node.js无法找到或执行Python可执行文件(python.exe)。

我已经尝试过的方法:

  • 确认Python已安装在服务器上,且已添加到系统PATH中
  • 使用Python可执行文件和脚本的绝对路径
  • 检查过文件和文件夹的权限
  • 用管理员/root权限运行Node.js应用

系统详情:

  • 后端:Node.js,使用child_process.spawn / child_process.exec调用脚本
  • 服务器系统:Windows
  • Python版本:3.13.3

错误详情:

执行脚本时收到如下错误:

首先是Node的 deprecation警告(暂时不是重点):

(node:16404) [DEP0005] DeprecationWarning: Buffer() is deprecated due to security and usability issues. Please use the Buffer.alloc(), Buffer.allocUnsafe(), or Buffer.from() methods instead.
(Use node --trace-deprecation ... to show where the warning was created)

关键的Python执行错误:

Access is denied.
Execution error: Command failed: "C:\Program Files\Python313\python.exe" "transaction_reader.py" "C:\Inetpub\vhosts\duesbuddy.com\payment-reader.duesbuddy.com\uploads\cdbceee3233198e84157c71a1c64d70e"
Access is denied.
Python process exited with code: 1
Execution error: Command failed: "C:\Program Files\Python313\python.exe" "transaction_reader.py" "C:\Inetpub\vhosts\duesbuddy.com\payment-reader.duesbuddy.com\uploads\753346430b0a47a477fdd74791fc9ff9" Access is denied. Python process exited with code: 1

尽管尝试了这些方法,问题仍然存在。有没有人遇到过类似的问题?我该如何解决? 任何指导都将不胜感激。


我的回答:

兄弟,我之前在Windows服务器上部署Node.js调用Python脚本时也踩过几乎一模一样的坑,结合你的情况给你几个针对性的排查和解决方向,应该能搞定:

  1. 优先排查IIS应用池的身份权限(核心问题!)
    从你的路径C:\Inetpub\vhosts\...来看,你的Node.js应该是用IIS托管的对吧?默认的IIS应用池身份(比如ApplicationPoolIdentity)权限非常有限,根本没有访问Python安装目录或者上传文件夹的权限。你可以这么操作:

    • 打开IIS管理器,找到你的项目对应的应用池,右键选择「高级设置」
    • 把「标识」选项改成LocalSystem(测试用,后续可以调整为最小权限的用户),或者一个拥有管理员权限的本地账户
    • 重启应用池和对应的网站,再测试Python脚本调用
  2. 给关键目录/文件添加对应权限
    就算改了应用池身份,也要确保以下路径有足够的权限:

    • C:\Program Files\Python313文件夹添加应用池身份(或你设置的用户)的读取&执行权限
    • transaction_reader.py所在目录以及uploads上传目录添加该用户的读取、写入、执行权限
    • 设置方法:右键文件夹→属性→安全→编辑→添加用户(比如IIS AppPool\你的应用池名称),然后勾选对应的权限选项
  3. 检查Windows的Python执行策略
    Windows默认的PowerShell执行策略可能会限制本地脚本运行,你可以打开管理员权限的PowerShell,执行:

    Set-ExecutionPolicy RemoteSigned
    

    输入Y确认即可,这样本地的Python脚本就能正常执行了(如果担心安全,后续可以改回Restricted,或者针对特定用户设置策略)

  4. 通过cmd.exe中转调用Python
    有时候直接调用Python.exe会因为权限上下文的问题失败,你可以试试让Node.js调用cmd来执行Python命令,示例代码如下:

    const { spawn } = require('child_process');
    // 注意路径转义,或者用模板字符串
    const imagePath = "C:\\Inetpub\\vhosts\\duesbuddy.com\\payment-reader.duesbuddy.com\\uploads\\cdbceee3233198e84157c71a1c64d70e";
    const pythonCmd = `"C:\\Program Files\\Python313\\python.exe" "transaction_reader.py" "${imagePath}"`;
    const child = spawn('cmd.exe', ['/c', pythonCmd]);
    

    通过cmd中转执行,往往能绕过一些权限限制

  5. 排查杀毒软件/防火墙拦截
    Windows服务器上的杀毒软件(比如Windows Defender)或者防火墙可能会拦截Node.js调用外部程序的请求,你可以临时关闭测试一下,如果问题消失,就把Python.exe和你的Node.js应用加入信任列表

我当时就是应用池权限的问题,改完之后立刻就正常了,你可以先从第一个方法试起,应该能解决你的问题!


备注:内容来源于stack exchange,提问作者Harshali Mankar

火山引擎 最新活动