3

Я установил Python с двоичными файлами Windows, поэтому мне нужно набрать python -i чтобы запустить Python в Cygwin. И когда я выхожу, мне нужно написать exit() . Это всего лишь небольшая проблема, но я все еще хотел бы знать, можно ли это исправить, чтобы я мог выйти, используя Ctrl+Z как при запуске Python в cmd

2 ответа2

1

Чтобы запустить 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 .

1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .