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
相关产品推荐
相关产品推荐

