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

Windows下subprocess多行命令shell=True仅执行首命令的原因咨询

问题原因及解决方案

这是因为Windows和Linux下shell=True调用的底层Shell程序完全不同,解析命令的逻辑差异导致的:

  • Linux下shell=True默认调用bash(或其他兼容POSIX的Shell),这类Shell会把换行符当作命令分隔符,自动拆分并执行多行命令。
  • Windows下shell=True默认调用cmd.exe,它不把\r\n当作命令分隔符,只会执行第一个换行前的命令,后面的内容直接被忽略。

解决办法

在Windows的cmd.exe里,要执行多条命令需要用专门的分隔符:

  1. 使用&分隔多条命令(不管前一条是否成功,都会执行下一条)
    import subprocess
    
    r = subprocess.run("echo 1&echo 2", shell=True, capture_output=True, text=True)
    print(r.stdout)
    
    执行后Windows下输出:
    1
    2
    
  2. 若想保留换行格式,可以用cmd.exe的换行转义符^,把命令写成:
    import subprocess
    
    r = subprocess.run("echo 1^\r\necho 2", shell=True, capture_output=True, text=True)
    print(r.stdout)
    
  3. 另外,&&也是cmd.exe的命令分隔符,它只会在前一条命令执行成功时才执行下一条,适合有依赖关系的命令。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 03:22:07