关于python:Winpty和Git Bash

Winpty and Git Bash

我遇到了与Python在git bash的命令行中不起作用相同的问题,在Git Bash中,当我键入Python时,它只是挂起了。

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

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


winpty是Windows软件包,提供与Unix pty-master类似的界面,用于与Windows控制台程序进行通信。

这就是为什么您需要这里描述的原因:

The software works by starting the winpty-agent.exe process with a new, hidden console window, which bridges between the console API and terminal input/output escape codes. It polls the hidden console's screen buffer for changes and generates a corresponding stream of output.

rprichard/winpty提到:

The package consists of a library (libwinpty) and a tool for Cygwin and MSYS for running Windows console programs in a Cygwin/MSYS pty.

如" mintty/mintty技巧"中所述:

When interacting with programs that use a native Windows API for command-line user interaction ("console mode"), a number of undesirable effects are observed; this is the pty incompatibility problem and the character encoding incompatibility problem.
This basically affects all programs not compiled in a cygwin or msys environment (and note that MinGW is not msys in this context).

As a workaround, you can use winpty as a wrapper to invoke the Windows program.

所以:

Why do many tools work in plain CygWin but some of them also need winpty?

msys2/MINGW-packages问题2645中被问到(特别是对于Python)

there's a non-zero cost associated with using winpty, and most of the time, mintty works fine anyway.
Your problem stems from trying to use mingw python which is a native windows build, and hence expects it to be used from a windows console.
mintty uses pipes for input/output, so it doesn't look like a proper terminal to most programs.

On the other hand, if you use msys2 (or cygwin) python (.e.g /usr/local/bin/python2), everything just works.

(对于msys2/MINGW-packages PR 2675,python3可以正确检测到终端)