在Git Bash里使用Python

winpty python

缘由

在使用 Git Bash 时发现以下几个问题,

  • 直接输入python,并不会进入交互式命令行,屏幕没有任何输出
  • 运行 python 脚本,输出结果不会实时显示
  • 输出中文,报编码错误
  • 在 Cmder 里使用 git bash 运行 Python 脚本,虽然不报编码错误,但是输出中文时,中文会在行末被截断

问题解决

在经历了卸载——重装——重置——清注册表后,问题依然存在,遂在 404 小站一通搜索。

中文编码

首先是中文编码问题,得到的答案是改编码,相关代码如下:

1
2
3
import io
import sys
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf8') #改变标准输出的默认编码

以下是一些常用和中文的编码:

编码名称 用途
utf8 所有语言
gbk 简体中文
gb2312 简体中文
gb18030 简体中文
big5 繁体中文
big5hkscs 繁体中文

但是上述代码在IDLE里运行会报错,而且如果encoding没选对,输出还是乱码。

实时显示

在不安装IPython的情况下,直接在git bash里输入python -i是可以进入交互式界面的,但不建议用于运行脚本。

解决方案

在stackoverflow搜索后发现,其实这是git bash所依赖的MSYS2的锅。临时的解决方法,是在命令行前加上winpty,即运行winpty python;永久的解决的方法有两个:一是修改bash的配置,二是修改Git for Windows的安装选项。理论上,这里的方法也能用于node。

修改配置

在git bash里运行以下命令

1
echo "alias python='winpty python.exe'" >> ~/.bash_profile

更改安装选项

在2.27.0版本后,Git for Windows提供了对“pseudo consoles”支持的选项,截图如下。但也正如截图所示,该选项不依赖winpty,是个实验性项目,且有bug。
安装选项

参考链接

解决 python3 UnicodeEncodeError: ‘gbk’ codec can’t encode character ‘\xXX’ in position XX

Python not working in the command line of git bash