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