【发布时间】:2018-06-20 08:29:17
【问题描述】:
我遇到了与 Python not working in the command line of git bash 相同的问题,在 Git Bash 中,当我输入 Python 时,它就会挂起。
但是,输入 winpty python 效果很好。
winpty 到底是什么?为什么上面的命令有用?
【问题讨论】:
我遇到了与 Python not working in the command line of git bash 相同的问题,在 Git Bash 中,当我输入 Python 时,它就会挂起。
但是,输入 winpty python 效果很好。
winpty 到底是什么?为什么上面的命令有用?
【问题讨论】:
winpty 是一个 Windows 软件包,提供类似于 Unix pty-master 的接口,用于与 Windows 控制台程序进行通信。
这就是为什么你需要它作为described here:
该软件通过使用新的隐藏控制台窗口启动
winpty-agent.exe进程来工作,该窗口在控制台 API 和终端输入/输出转义码之间架起了一座桥梁。它轮询隐藏控制台的屏幕缓冲区以进行更改并生成相应的输出流。
rprichard/winpty 提及:
该软件包包含一个库 (libwinpty) 和一个用于 Cygwin 和 MSYS 的工具,用于在 Cygwin/MSYS pty 中运行 Windows 控制台程序。
详见“mintty/mintty Tips”:
与使用本机 Windows API 进行命令行用户交互(“控制台模式”)的程序进行交互时,会观察到许多不良影响;这是pty incompatibility problem 和character encoding incompatibility problem。
这基本上会影响所有未在 cygwin 或 msys 环境中编译的程序(请注意,MinGW 在此上下文中不是 msys)。作为一种解决方法,您可以使用
winpty作为包装器来调用 Windows 程序。
所以:
为什么很多工具可以在普通的 CygWin 中工作,但其中一些还需要 winpty?
这是在msys2/MINGW-packages issue 2645 中提出的(专门针对 Python)
使用 winpty 的成本不为零,而且大多数情况下,mintty 都可以正常工作。
您的问题源于尝试使用本机 Windows 构建的 mingw python,因此希望从 Windows 控制台使用它。
mintty 使用管道进行输入/输出,因此对于大多数程序来说,它看起来不像是一个合适的终端。另一方面,如果您使用 msys2(或 cygwin)python(例如
/usr/local/bin/python2),一切正常。
(使用msys2/MINGW-packages PR 2675,python3正确检测终端)
【讨论】: