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