62 votes

Utiliser Windows Python de Cygwin

J'ai été en utilisant Cygwin sous Windows récemment. Je veux utiliser le Windows installation de Python, donc pendant les tests, je suis en utilisant /cygdrive/c/Python26/python.exe myfile.py plutôt que d' python myfile.exe.

Cela fonctionne presque parfaitement, sauf pour l'impression. Quand je lance le Windows Python à partir de Cygwin, la sortie n'a pas l'impression jusqu'à l'exécution de finitions. Il fonctionne très bien sous Windows Python à partir de explorer.exe ou cmd.exe et il travaille en en utilisant Cygwin Cygwin-installé Python (/bin/python.exe).

Est-il une solution pour cela? La chose importante est d'être en mesure d'exécuter la version de Windows, mais j'aimerais faire de tout avec Bash.

118voto

noisygecko Points 746

Le vrai problème est que lorsque vous exécutez une commande du terminal Cygwin des programmes comme mintty, ils n'agissent pas comme Windows Consoles. Seulement Windows basée sur une Console comme la CMD ou Console2 le faire. Ainsi, avec Cygwin terminaux Windows python.exe ne pense pas qu'il est en train de parler d'une console interactive.

Qui conduit à la mise en mémoire tampon de sortie au lieu de vidage des tampons sur chaque ligne, comme cela se fait dans des sessions interactives. C'est pourquoi Amro ajout de la méthode flush() sur chaque ligne résout le problème, mais le moyen de changer le code.

Une solution sans changer le code pour désactiver la mise en mémoire tampon en Python à l'aide de l'option '-u' drapeau sur la ligne de commande ou de réglage de la PYTHONUNBUFFERED variable d'environnement.

export PYTHONUNBUFFERED=1

/cydrive/c/Python27/python.exe foo.py

ou

/cydrive/c/Python27/python.exe -u foo.py

ou exécuter en mode interactif

/cydrive/c/Python27/python.exe -i foo.py

Vous pourrez également ne pas être en mesure d'exécuter le Windows python.exe le mode interactif dans le terminal Cygwin. Il ne sera pas ouvrir une session interactive, mais il suffit de le pendre. J'ai trouver la meilleure solution semble être l'utilisation de 'cygstart' (mieux que d'utiliser l'option '-i'):

cygstart /cygdrive/c/Python27/python.exe

Et qui semble fonctionner avec ipython (si installé):

cygstart /cygdrive/c/Python27/Scripts/ipython.exe

40voto

Timur Points 2284

Ne pas répondre à la question initiale, mais pour ceux qui veulent l'utiliser Python session interactive de l'intérieur Cygwin terminal (par exemple dans mintty) - commencer Python avec le "je" de l'option pour le dire explicitement qu'il doit exécuter dans le mode interactif:

$ python -i

La façon soignée est également de créer un alias dans votre .bashrc (sachant que c'est uniquement en lecture pour borne interactive sessions de toute façon):

alias python='python -i'

Sinon, Python ne savez pas qu'il s'exécute dans la console, parce que tous Cygwin pty terminaux (mintty, rxvt et xterm) sont reconnus comme des tuyaux par Windows, pas que la console. Par conséquent, Python pense qu'il y a pas de console et entre en mode non-interactif. Donc, si vous voulez encore le mode interactif au lieu de cela, vous devez indiquer explicitement Python à utiliser. Cependant, il ne se comporte pas comme il devrait normalement - on encore ne pas être en mesure d'utiliser à la MAISON ou à GAUCHE les touches FLÉCHÉES, et ainsi de suite.

24voto

Amro Points 72743

Peut-être que si vous videz la sortie

 import sys

V = range(100000)
for x in V:
    print x
    sys.stdout.flush()
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X