Подтвердить что ты не робот

Вызов python под CygWin на Windows зависает

Установка новой системы Windows, я установил CygWin и 64 бит Python (2.7.3) в своих местоположениях по умолчанию (c:\cygwin и c:\Python27\python), и добавили и CygWin bin, и Python на мой путь (в переменной пользователя PATH). Из нормальное командное окно, Python запускается отлично, но когда Я вызываю его из bash в среде CygWin, он зависает, никогда не давая подсказки ввода.

Я делал это на других машинах ранее, но всегда с более старые версии Python (32 бита) и CygWin, а также Python в явно нестандартном месте. Кто-нибудь еще имел это проблема, или может кто-нибудь сказать мне, что это может быть из-за?

4b9b3361

Ответ 1

Проблема заключается в том, что из-за того, что ведет себя терминал Cygwin (MinTTY), встроенная сборка Windows на Python не понимает, что stdout является терминальным устройством - он думает, что это канал, интерактивный режим вместо интерактивного режима, и он полностью буферизует свой вывод вместо буферизации строки.

Причина, по которой это ново, вероятно, потому что в вашей предыдущей установке Cygwin у вас не было MinTTY, а используемый терминал был стандартным терминалом Windows.

Чтобы исправить это, вам нужно либо запустить Python с обычного терминала Windows (Cmd.exe), либо установить версию Cygwin Python вместо собственной сборки Windows на Python. Версия Cygwin (устанавливаемая как пакет через Cygwin setup.exe) понимает терминалы Cygwin и действует надлежащим образом при запуске через MinTTY.

Если конкретная версия Python, которую вы хотите, недоступна в виде пакета Cygwin, вы также можете загрузить исходный код Python и создать его самостоятельно под Cygwin. Вам понадобится компилятор Cygwin-компилятора, если у вас его еще нет (GCC), но я считаю, что он должен компилироваться со стандартной командой ./configure && make && make install.

Ответ 2

Попробуйте это

python -i

и да, вы найдете некоторые глюки здесь и там!!!

Ответ 3

У меня была аналогичная проблема с Mercurial (hg) + OpenSSH, Python и MinTTY, но в MSYS вместо CygWin. Тем не менее, насколько я могу судить, и эта, и моя проблема были вызваны тем, что MinTTY не обрабатывал приложения, которые используют собственные функции консоли Windows (в ответе здесь Адам, он подробно объяснил это для Python).

Для меня я выполнил решение, найденное в комментарии 64 https://code.google.com/p/mintty/issues/detail?id=56#c64

Когда проект winpty (https://github.com/rprichard/winpty) скомпилирован и на моем пути, я смог запустить native Python (в интерактивном режиме ) и Mercurial из оболочки MinTTY без специальных сборок или переключателей (например, python -i). Все, что мне нужно было добавить console.exe или console перед командой python или hg. Для удобства я добавил псевдонимы, такие как alias hg="console.exe hg", поэтому я могу использовать те же команды, будь то в оболочке Linux или оболочке Windows MinTTY bash.

Кроме того, это решение работает для более собственных приложений за пределами python и hg. Например, запуск mysql (с или без -p) дал бы ту же проблему (например, "зависает" без приглашения ввода). Добавление к нему console позволило сделать это как обычно.

Ответ 4

В соответствии с fooobar.com/questions/96832/... вы также можете попробовать

/cydrive/c/Python27/python.exe -i foo.py

Ответ 5

Для управления местоположениями не-cygwin разных версий Python в CygWin:

$ /usr/sbin/alternatives.exe

Используйте опции -install и --config здесь, он работает так же, как update-alternatives в системе Linux. Я использую это вместе с подходом python -i, и он работает хорошо.

Мне также пришлось сначала удалить файлы sym-link в /usr/bin, так как они были установлены с пионом CygWin и не управлялись с помощью alternatives.exe изначально.

Ответ 6

В моем решении было написано оболочку script для запуска приложения python.

python file.py "[email protected]" | tee /dev/null

Эта дополнительная команда tee (в никуда), похоже, устраняет проблему.