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

Python在Git Bash/Cygwin中打印的长行复制粘贴后断行的问题求助

Python在Git Bash/Cygwin中打印的长行复制粘贴后断行的问题求助

大家好,我遇到了一个挺困扰的问题,想请教下各位:

我写了个Python程序,会输出一些示例命令方便用户复制粘贴运行,但这些命令都是很长的单行。最近发现,当Python在Git Bash里打印这些长行时,虽然视觉上是自动换行的单行,但复制粘贴回同一个Git Bash窗口后,原本的长行会被识别成多个断开的短行,直接导致命令执行出错。

测试脚本与现象

我写了个简单的测试脚本test_long_line.py来复现问题:

#!/usr/bin/env python

line = "echo cmd"
for i in range(0, 30):
    line = f"{line} arg{i} "
print(line)

运行这个脚本后,输出看起来是正常的自动换行(视觉上是一行):

$ test_long_line.py
echo cmd arg0  arg1  arg2  arg3  arg4  arg5  arg6  arg7  arg8  arg9  arg10  arg11  arg12  arg13  arg14  arg15  arg16  arg17  arg18  arg19  arg20  arg21  arg22  arg23  arg24  arg25  arg26  arg27  arg28
  arg29

但当我把这段输出复制粘贴回Git Bash执行时,就出问题了——Git Bash把它当成了多个命令,直接报错:

$ echo cmd arg0  arg1  arg2  arg3  arg4  arg5  arg6  arg7  arg8  arg9  arg10  arg11  arg12  arg13  arg
14  arg15  arg16  arg17  arg18  arg19  arg20  arg21  arg22  arg23  arg24  arg25  arg26  arg27  arg28
  arg29
cmd arg0 arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9 arg10 arg11 arg12 arg13 arg
bash: 14: command not found
bash: arg29: command not found

额外实验结论

我测试了不同环境和语言,总结出这些规律:

  • 同样的问题在Cygwin里用Python打印时也会出现
  • 但Windows原生的命令提示符(cmd.exe)里完全没有这个问题
  • Perl的print语句不会出现这个问题(测试脚本如下)
  • Bash自身的echo命令也不会有这个问题(测试脚本如下)
  • WSL2的Linux终端里不存在这个问题

我的测试环境

  • Windows 10(已安装最新系统补丁)
  • Python 3.12.4
  • Git Bash Mintty 3.7.1
  • Cygwin Mintty 3.7.4

对比用的测试脚本

Perl测试脚本(无问题):print_long_line.pl

#!/usr/bin/env perl

use strict;

my $line = "echo cmd ";
for (my $i = 0; $i < 30; $i++) {
    $line .= "arg$i ";
}
print $line;

Bash测试脚本(无问题):test_long_line.bash

#!/bin/bash

line="echo cmd"
for i in {0..29}; do
   line+=" arg$i"
done
echo "$line"

我用Python好些年了,这还是第一次遇到这种情况,完全搞不懂为什么Python会出现这种问题。有没有大佬能帮我分析下原因,或者给个解决办法?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 14:19:53