Invoquant python sous CygWin sous Windows se bloque
L'installation d'un nouveau système de Windows, j'ai installé CygWin et 64
peu de Python (2.7.3) dans leurs emplacements par défaut (c:\cygwin
et
c:\Python27\python
), et a ajouté deux CygWin bin et le
Python répertoire de mon chemin (dans la variable de CHEMIN d'accès). À partir de
la normale de la fenêtre de commande, Python démarre parfaitement, mais quand
J'invoque de bash
dans l'environnement CygWin, il se bloque,
ne jamais donner mon l'invite d'entrée.
Je l'ai fait sur d'autres machines, auparavant, mais toujours avec
les anciennes versions de Python (32 bits) et CygWin, et avec Python
dans un decidely emplacement non standard. Quelqu'un d'autre a eu ce
problème, ou quelqu'un pourrait-il me dire ce que ça peut être dû?
Vous devez vous connecter pour publier un commentaire.
Le problème est que, en raison de la façon dont le terminal Cygwin (MinTTY) se comporte, natif de Windows version de Python ne se rend pas compte que la sortie standard est un terminal -- il pense que c'est une pipe, il fonctionne en mode non-interactif au lieu du mode interactif, et il les tampons de sa sortie au lieu de la ligne de mise en mémoire tampon il.
La raison que c'est nouveau, c'est probablement parce que dans votre précédent Cygwin d'installation, vous n'avez pas MinTTY, et le terminal utilisé était juste le terminal standard de Windows.
Afin de résoudre ce problème, vous devez exécuter Python à partir d'un Windows terminal (
Cmd.exe
), ou d'installer Cygwin version de Python au lieu d'un natif de Windows version de Python. La version Cygwin (installable comme un paquet via Cygwin estsetup.exe
) comprend Cygwin bornes et agit de façon appropriée lorsqu'il est exécuté par MinTTY.Si la version de Python que vous souhaitez n'est pas disponible comme un environnement Cygwin, vous pouvez également télécharger le code source de Python et de construire vous-même sous Cygwin. Vous aurez besoin d'un Cygwin compilateur de la chaîne si vous n'en avez pas déjà un (GCC), mais alors je pense qu'il doit compiler avec un standard
./configure && make && make install
commande.python -i
œuvres, et de créer un alias dans.bashrc
est probablement une solution acceptable.-u
commutateur de ligne de commande ou en définissant la variable d'environnementPYTHONUNBUFFERED=1
va changer Python tampon comportement.Essayer cette
et oui, vous trouverez quelques bugs ici et là !!!
J'ai eu un problème similaire avec Mercurial (hg)+OpenSSH, Python et MinTTY, mais en vertu de la pme au lieu de CygWin. Néanmoins, pour autant que je peux dire, ce et mon problème ont été causés par MinTTY n'étant pas de traiter les demandes qui utilise le natif de Windows fonctions de la console (dans une réponse ici, par Adam, il l'a expliqué en détail pour Python).
Pour moi, j'ai suivi la solution trouvée dans un commentaire 64 de https://code.google.com/p/mintty/issues/detail?id=56#c64
Avec le winpty (https://github.com/rprichard/winpty) projet compilé et dans mon chemin, j'ai été en mesure d'exécuter natif Python (en mode interactif) et Mercurial de la MinTTY shell, sans s'appuie ou des commutateurs (comme
python -i
). Il m'a suffit d'ajouterconsole.exe
ouconsole
avant lapython
ouhg
de commande. Pour plus de commodité, j'ai ajouté des noms d'alias commealias hg="console.exe hg"
si je peux utiliser les mêmes commandes que je suis dans un shell Linux ou un Windows MinTTY shell bash.Aussi, cette solution semble fonctionner pour plus d'applications natives au-delà de python et hg. Par exemple, l'exécution de
mysql
(avec ou sans-p
) aurait donné le même problème (par exemple, "se bloque" avec pas d'entrée de commande). Ajoutantconsole
à elle, permis d', comme d'habitude.python -i
gère réellement changer la borne de mise en mémoire tampon et de lire des caractères individuels. Il doit être en train de faire quelque chose d'intelligent sous le capot. De toute façonwinpty
est la façon de faire avec mon Python script, ce qui n'était pas si intelligent.winpty
a maintenant été changé à partir deconsole.exe
àwinpty.exe
.Selon https://stackoverflow.com/a/9549255/745913 vous pouvez également essayer
De gestion des non-cygwin emplacements des différentes versions de Python dans CygWin:
Utiliser l'option --install et --les options de configuration ici, il fonctionne de la même comme
update-alternatives
sur un système Linux.Je suis en utilisant ce avec l'
python -i
approche, et il fonctionne bien.J'ai également dû supprimer le lien symbolique de fichiers dans
/usr/bin
d'abord, puisqu'ils ont été installés avec CygWin du python et ne sont pas gérées par alternatives.exe d'abord.un autre universel solution de contournement consiste en l'invoquant par
winpty
https://github.com/rprichard/winpty et ce n'est pas vraiment un python problème spécifique.Ma solution a consisté à écrire un script shell pour exécuter l'application python.
Supplémentaire té de commande (nulle part) semble résoudre le problème.
Réinstaller mintty avec le programme d'installation de cygwin. Ne pas avoir à utiliser python -je après que.