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

Linux下从Python调用Bash时大括号扩展失效原因探究

跨平台差异原因解析

这种差异的核心是subprocess调用时默认使用的Shell类型不同,具体细节:

  • macOS系统中,/bin/sh是bash的符号链接(即便系统默认用户shell改为zsh,/bin/sh依然指向bash)。当subprocess启用shell=True时,实际调用的是bash,而bash原生支持大括号扩展语法,因此脚本能正常输出1到10。
  • 多数主流Linux发行版(如Ubuntu、Debian系列)中,/bin/sh指向轻量POSIX兼容Shell——dash,dash不支持大括号扩展这类bash专属语法。subprocess默认调用/bin/sh执行脚本时,大括号会被当作普通字符串直接输出。

注:终端交互Shell下能正常执行,是因为你打开的交互Shell通常是bash(或其他支持扩展的Shell),而非系统默认的/bin/sh。

解决办法

要让Linux下也正常解析大括号扩展,只需明确指定用bash执行:

  • 方式一:在subprocess调用中直接指定bash命令
    import subprocess
    result = subprocess.run(['bash', '-c', 'for i in {1..10}; do echo $i; done'], capture_output=True)
    print(result.stdout)
    
  • 方式二:给脚本添加bash的shebang头,再调用脚本文件
    脚本文件loop.sh内容:
    #!/bin/bash
    for i in {1..10}; do
      echo $i
    done
    
    Python调用代码:
    import subprocess
    result = subprocess.run(['./loop.sh'], capture_output=True)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 11:00:04