我遇到了与Python 无法在 git bash 的命令行中工作相同的问题,在 Git Bash 中,当我输入 时Python
,它只是挂起。
但是,打字winpty python
效果很好。
究竟是winpty
什么?为什么上面的命令有用?
我遇到了与Python 无法在 git bash 的命令行中工作相同的问题,在 Git Bash 中,当我输入 时Python
,它只是挂起。
但是,打字winpty python
效果很好。
究竟是winpty
什么?为什么上面的命令有用?
winpty是一个 Windows 软件包,提供类似于 Unix pty-master 的接口,用于与 Windows 控制台程序进行通信。
这就是为什么您需要它,如此处所述:
该软件通过
winpty-agent.exe
使用新的隐藏控制台窗口启动进程来工作,该窗口在控制台 API 和终端输入/输出转义码之间架起了桥梁。它轮询隐藏控制台的屏幕缓冲区以查找更改并生成相应的输出流。
该软件包由一个库 (libwinpty) 和一个用于 Cygwin 和 MSYS 的工具组成,用于在 Cygwin/MSYS pty 中运行 Windows 控制台程序。
如“mintty/mintty
提示”中所述:
当与使用本机 Windows API 进行命令行用户交互(“控制台模式”)的程序进行交互时,会观察到许多不良影响;这是pty不兼容问题和字符编码不兼容问题。
这基本上会影响所有未在 cygwin 或 msys 环境中编译的程序(请注意,MinGW 在此上下文中不是 msys)。作为一种解决方法,您可以将
winpty
其用作包装器来调用 Windows 程序。
所以:
为什么许多工具在普通的 CygWin 中工作,但其中一些还需要 winpty?
在issue 2645中提出了这个问题(特别是针对 Python)msys2/MINGW-packages
使用 winpty 的成本不为零,而且大多数情况下,mintty 都可以正常工作。
您的问题源于尝试使用本机 Windows 构建的 mingw python,因此希望从 Windows 控制台使用它。
mintty 使用管道进行输入/输出,因此对于大多数程序来说,它看起来不像是一个合适的终端。另一方面,如果您使用 msys2(或 cygwin)python(.eg
/usr/local/bin/python2
),一切正常。
(使用msys2/MINGW-packages
PR 2675,python3 正确检测到终端)