我遇到了与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-packagesPR 2675,python3 正确检测到终端)