Как выйти из Windows Python в Cygwin
Я установил Python с двоичными файлами Windows, поэтому мне нужно набрать python -i
запустить Python в Cygwin. И когда я выхожу, мне нужно написать exit()
, Это просто небольшая проблема, но я все еще хотел бы знать, если это можно исправить, чтобы я мог выйти с помощью Ctrl+Z
как я делаю, когда я запускаю Python в cmd
2 ответа
Чтобы запустить Windows Python из Cygwin, всегда делайте это:
$ cygstart python
Никогда не делай этого:
$ python -i
Это распространяется и на Windows IPython. Всегда делайте это:
$ cygstart ipython
Никогда не делай этого:
$ ipython -i
Прежде чем мы выясним почему, давайте поговорим ${PATH}
,
Python и ${Path}
: Наконец-то вместе!
Приведенный выше ответ предполагает python
в вашем текущем ${PATH}
быть родной Windows, а не установленной Cygwin версией Python. Если последний случай, абсолютный путь вашего Windows Python должен быть явно передан cygstart
, Например:
$ cygstart /cygdrive/c/Miniconda3/python.exe
Если вы используете Windows Python с какой-либо частотой, вы, вероятно, захотите сделать это своим окончательным python
, Если вы установили популярный дистрибутив Python (например, Anaconda, Miniconda, Enthought Canopy), это означает, что вы. Для этого предварительно ${PATH}
по абсолютному пути каталога, содержащего python.exe
при запуске оболочки (например, в ~/.bashrc
). Например:
# Stash this somewhere.
export PATH="/cygdrive/c/Miniconda3:${PATH}"
Что случилось с python -i
или же cmd.exe
Чаммер?
Подчеркнув еще одну благонамеренную рекомендацию запускать Windows Python через python -i
изнутри Cygwin или python
из терминала, не принадлежащего Cygwin, я только качаю головой.
Нет. Нет. Нет. В обоих случаях вы делаете это неправильно.
В случае бега python -i
изнутри Cygwin вы теряете разумные привязки клавиатуры (например, < Up > и < Down > для циклического перемещения по истории REPL, < Ctrl-D > для завершения REPL) и, что еще важнее, буферизацию вывода.
В случае бега python
из терминала, отличного от Cygwin, вы теряете Cygwin. Вы используете Cygwin по причине - вероятно, потому что вы предпочитаете POSIX-совместимость и все, что влечет за собой (например, нормальную оболочку), по сравнению с обычной альтернативой Windows.
О чем так горячо курят cygstart
, Тем не мение?
Там нет причин, чтобы бросить Cygwin. Однако есть все основания запускать собственное приложение Windows и, следовательно, Windows Python из Cygwin, как собственный процесс Windows, а не как POSIX-совместимый процесс Cygwin. Что это не так.
Войти cygstart
,
Эта стандартная утилита Cygwin (довольно запутанно) перегружена, чтобы взаимодействовать множеством незначительно интересных способов с собственными приложениями Windows, путями и URI. Для нашей цели прохождение cygstart
название команды в текущем ${PATH}
запускает эту команду как собственный процесс Windows, сохраняя синтаксис и семантику оболочки Windows в присутствии Cygwin.
ТЛ; др
Собственные приложения Windows, включая Windows Python и IPython, всегда должны запускаться из Cygwin через cygstart
команда.
Проблема здесь заключается в разнице между эмуляторами терминалов Cygwin (MinTTY и т. Д.), Которые пытаются действовать как терминалы Linux для собственных приложений Cygwin, и эмулятором терминалов Windows cmd. Поскольку MinTTY обрабатывает сигналы по-разному, он не передает Ctrl+Z как сигнал EOF в Windows Python, в то время как Ctrl+D вообще не обрабатывается Windows Python.
Решение состоит в том, чтобы придерживаться использования Windows Python в эмуляторах терминала Windows (т. Е. Эмулятора терминала cmd, который тот же, который вы получаете при запуске Windows Python из меню "Пуск" или аналогичного), а также установить Cygwin Python и использовать его из Эмуляторы терминала Cygwin. Таким образом, каждый из них будет правильно получать и обрабатывать соответствующие сигналы.