He instalado Python con los binarios de Windows, así que necesito escribir python -i
para iniciar Python en Cygwin. Y cuando salgo, necesito escribir exit()
. Es solo un problema menor, pero aún me gustaría saber si es posible solucionarlo para poder salir usando Ctrl+Z
como hago cuando ejecuto Python encmd
3
Ctrl-D
para salir en su lugar.Respuestas:
El problema aquí es la diferencia entre los emuladores de terminal Cygwin (MinTTY, etc.), que intentan actuar como terminales Linux en beneficio de las aplicaciones nativas de Cygwin, y el emulador de terminal cmd de Windows. Debido a que MinTTY maneja las señales de manera diferente, no pasará Ctrl+ Zcomo una señal EOF a Windows Python, mientras que Windows Python no maneja el Ctrl+ D.
La solución es seguir usando Windows Python en emuladores de terminal de Windows (es decir, el emulador de terminal cmd, que es el mismo que obtienes si inicias Windows Python desde el menú Inicio o similar), e instalar Cygwin Python y usarlo desde Emuladores de terminal Cygwin. De esa manera, cada uno recibirá y manejará las señales relevantes correctamente.
fuente
Para ejecutar Windows Python desde Cygwin, haga siempre esto:
Nunca hagas esto:
Esto se extiende también a Windows IPython. Siempre haz esto:
Nunca hagas esto:
Antes de llegar a por qué, sin embargo, hablemos
${PATH}
.Python y
${Path}
: ¡Juntos por fin!La respuesta anterior supone que la versión
python
actual${PATH}
de Windows es la versión nativa de Python instalada por Cygwin. Si este último es el caso, se debe pasar explícitamente la ruta absoluta de su Windows Pythoncygstart
. Por ejemplo:Si ejecuta Windows Python con alguna apariencia de frecuencia, es probable que desee que sea definitivo
python
. Si instaló una distribución popular de Python (por ejemplo, Anaconda, Miniconda, Enthought Canopy), esto significa que usted. Para hacerlo, anteponga${PATH}
la ruta absoluta del directorio que contienepython.exe
al iniciar el shell (por ejemplo, in~/.bashrc
). Por ejemplo:¿Qué tiene de malo
python -i
ocmd.exe
, Chummer?Al espiar otra recomendación bien intencionada para ejecutar Windows Python a través
python -i
de Cygwin opython
desde un terminal que no sea Cygwin, solo sacudo la cabeza.No. No. No. En ambos casos, lo estás haciendo mal.
En el caso de que se ejecute
python -i
desde Cygwin, se pierden las cuerdas del teclado (p. Ej., < Arriba > y < Abajo > para recorrer el historial REPL, < Ctrl-D > para finalizar el REPL) y, quizás lo más importante, el almacenamiento en búfer de salida.En el caso de ejecutarse
python
desde un terminal que no sea Cygwin, pierde Cygwin. Usas Cygwin por una razón, presumiblemente porque prefieres la compatibilidad POSIX y todo lo que conlleva (por ejemplo, un shell sano) a la alternativa convencional de Windows.De
cygstart
todos modos, ¿qué es tan bueno fumar ?No hay razón para dejar caer a Cygwin. Sin embargo, hay muchas razones para ejecutar una aplicación nativa de Windows y, por lo tanto, Windows Python desde Cygwin como un proceso nativo de Windows en lugar de un proceso Cygwin compatible con POSIX. Que no lo es.
Introduzca
cygstart
.Esta utilidad estándar de Cygwin está sobrecargada (bastante confusamente) para interactuar en una variedad de formas marginalmente interesantes con aplicaciones, rutas y URI nativos de Windows. Para nuestro propósito, pasar
cygstart
el nombre de un comando en el actual${PATH}
ejecuta ese comando como un proceso nativo de Windows, preservando la sintaxis y la semántica del shell de Windows en presencia de Cygwin.tl; dr
Las aplicaciones nativas de Windows, incluidas Windows Python e IPython, siempre deben ejecutarse desde Cygwin mediante el
cygstart
comando.fuente