web-dev-qa-db-fra.com

Winpty et Git Bash

J'ai eu le même problème que Python ne fonctionne pas dans la ligne de commande de git bash , où dans Git Bash, lorsque je tape Python, il se bloque simplement.

Cependant, en tapant winpty python fonctionne parfaitement.

Qu'est-ce que winpty exactement? Pourquoi la commande ci-dessus est-elle utile?

14
Nico

winpty est un progiciel Windows fournissant une interface similaire à un pty-master Unix pour communiquer avec les programmes de la console Windows.

C'est pourquoi vous en avez besoin comme décrit ici :

Le logiciel fonctionne en démarrant le winpty-agent.exe processus avec une nouvelle fenêtre de console cachée, qui fait le pont entre l'API de la console et les codes d'échappement d'entrée/sortie du terminal. Il interroge le tampon d'écran de la console cachée pour les modifications et génère un flux de sortie correspondant.

rprichard/winpty mentionne:

Le package se compose d'une bibliothèque (libwinpty) et d'un outil pour Cygwin et MSYS pour exécuter des programmes de console Windows dans un pty Cygwin/MSYS.

Comme détaillé dans " mintty/mintty Conseils ":

Lors de l'interaction avec des programmes qui utilisent une API Windows native pour l'interaction utilisateur en ligne de commande ("mode console"), un certain nombre d'effets indésirables sont observés; c'est le problème d'incompatibilité pty et le problème d'incompatibilité d'encodage de caractères .
Cela affecte fondamentalement tous les programmes non compilés dans un environnement cygwin ou msys (et notez que MinGW n'est pas msys dans ce contexte).

Pour contourner ce problème, vous pouvez utiliser winpty comme wrapper pour appeler le programme Windows.


Alors:

Pourquoi de nombreux outils fonctionnent-ils en CygWin ordinaire, mais certains ont également besoin de Winpty?

Cela a été demandé (spécifiquement pour Python) dans msys2/MINGW-packages problème 2645

il y a un coût non nul associé à l'utilisation de winpty, et la plupart du temps, mintty fonctionne bien de toute façon.
Votre problème découle de l'utilisation de mingw python qui est une version native de Windows et s'attend donc à ce qu'il soit utilisé à partir d'une console Windows.
mintty utilise des canaux pour les entrées/sorties, il ne ressemble donc pas à un terminal approprié pour la plupart des programmes.

En revanche, si vous utilisez msys2 (ou cygwin) python (.e.g /usr/local/bin/python2), tout fonctionne.

(Avec msys2/MINGW-packages PR 2675 , python3 détecte correctement le terminal)

10
VonC