Winpty and Git Bash

PythonGit BashWinpty

Python Problem Overview


I had the same issue as https://stackoverflow.com/questions/32597209/python-not-working-in-the-command-line-of-git-bash, where in Git Bash, when I type Python, it just hangs.

However, typing winpty python works perfectly.

What exactly is winpty? Why is the above command useful?

Python Solutions


Solution 1 - Python

winpty is A Windows software package providing an interface similar to a Unix pty-master for communicating with Windows console programs.

That is why you need it as described here:

> 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 mentions:

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

As detailed in "mintty/mintty Tips":

> 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.


So:

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

This was asked (specifically for Python) in msys2/MINGW-packages issue 2645

> 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.

(With msys2/MINGW-packages PR 2675, python3 detects the terminal correctly)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNicoView Question on Stackoverflow
Solution 1 - PythonVonCView Answer on Stackoverflow