在Git Bash里使用Python
winpty python
缘由
在使用 Git Bash 时发现以下几个问题,
- 直接输入
python
,并不会进入交互式命令行,屏幕没有任何输出 - 运行 python 脚本,输出结果不会实时显示
- 输出中文,报编码错误
- 在 Cmder 里使用 git bash 运行 Python 脚本,虽然不报编码错误,但是输出中文时,中文会在行末被截断
问题解决
在经历了卸载——重装——重置——清注册表后,问题依然存在,遂在 404 小站一通搜索。
中文编码
首先是中文编码问题,得到的答案是改编码,相关代码如下:
1 | import io |
以下是一些常用和中文的编码:
编码名称 | 用途 |
---|---|
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