【问题标题】:Winpty and Git BashWinpty 和 Git Bash
【发布时间】:2018-06-20 08:29:17
【问题描述】:

我遇到了与 Python not working in the command line of git bash 相同的问题,在 Git Bash 中,当我输入 Python 时,它就会挂起。

但是,输入 winpty python 效果很好。

winpty 到底是什么?为什么上面的命令有用?

【问题讨论】:

    标签: python git-bash winpty


    【解决方案1】:

    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 problemcharacter 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正确检测终端)

    【讨论】:

    • 好的……但这不是对 CygWin 用途的描述吗?为什么很多工具可以在普通 CygWin 中工作,但其中一些还需要 winpty?
    • @EastofNowhere 我怀疑是因为它是 Python 的原生 Windows 构建版本。请参阅我编辑的答案。
    猜你喜欢
    • 2017-04-02
    • 1970-01-01
    • 2018-09-11
    • 2017-08-31
    • 2014-04-27
    • 2017-05-08
    • 2022-08-22
    • 2019-01-17
    • 1970-01-01
    相关资源
    最近更新 更多