You need to enable JavaScript to run this app. Python 3.9.2使用subprocess.call调用外部命令报FileNotFoundError
优惠活动
大模型
产品
解决方案
定价
更多

Python 3.9.2使用subprocess.call调用外部命令报FileNotFoundError

报错根本原因
  • ls 是类Unix(Linux、macOS)系统的原生命令,Windows原生不存在名为ls.exe的可执行执行文件
  • 部分用户看到Windows终端输入ls能返回结果,这是PowerShell提供的命令别名效果,不是系统真的生成了ls可执行程序;subprocess模块默认是直接调用系统CreateProcess接口启动可执行文件,不会经过PowerShell的别名解析逻辑,自然检索不到对应的ls程序
  • 即使换成Windows原生的内置命令(比如dir),如果这类命令没有独立的exe实体文件,subprocess默认的调用方式也会因为找不到可执行文件报错
对应解决方法
  • 方案1:直接替换为Windows原生命令实现等价功能
    如果需要实现类ls -l的列目录效果,调用Windows自带的dir命令,因为dir是cmd的内置命令,需要搭配shell=True参数才能正常运行,示例代码:
    from subprocess import call
    call("dir", shell=True)
    
  • 方案2:需要保留ls命令调用能力的场景
    如果本机安装了Git Bash、WSL、Cygwin等类Unix兼容环境,可以直接传入ls.exe的完整绝对路径调用,不需要开启shell=True参数,示例代码:
    from subprocess import call
    # 替换为你本机实际的ls.exe存储路径
    call([r"C:\Program Files\Git\usr\bin\ls.exe", "-l"])
    
  • 通用排查规则(其他同类FileNotFoundError报错可参考)
    • 确认要调用的目标程序是真实存在的独立可执行文件,且文件路径在系统PATH环境变量配置中
    • 如果要调用的是cmd/PowerShell的内置命令(无独立exe实体),必须给subprocess的调用方法加上shell=True参数,否则会因为检索不到同名可执行文件触发报错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 15:45:04