Как выйти из 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. Таким образом, каждый из них будет правильно получать и обрабатывать соответствующие сигналы.

Другие вопросы по тегам