Использование Windows Python из Cygwin

Недавно я использовал Cygwin для Windows. Я хочу использовать установку Windows на Python, поэтому во время тестирования я использую /cygdrive/c/Python26/python.exe myfile.py а не python myfile.exe .

Это работает почти отлично, за исключением печати. Когда я запускаю Windows Python из Cygwin, вывод не печатается, пока исполнение не завершится. Он отлично работает в Windows Python из explorer.exe или cmd.exe и работает в Cygwin с использованием установленного Cygwin Python ( /bin/python.exe ).

Есть ли обходной путь для этого? Важно иметь возможность запускать версию Windows, но я хотел бы сделать все это с помощью Bash.

3 Solutions collect form web for “Использование Windows Python из Cygwin”

Возможно, если вы очистите выход

 import sys V = range(100000) for x in V: print x sys.stdout.flush() 

Реальная проблема заключается в том, что когда вы запускаете команду в любой из терминальных программ Cygwin, таких как mintty, они не действуют как консоли Windows. Только Windows Console, такие как CMD или Console2, делают это. Итак, с терминалами Cygwin Windows python.exe не думает, что он разговаривает с интерактивной консолью.

Это приводит к буферизации вывода вместо сброса буферов на каждой строке, как это делается в интерактивных сеансах. Вот почему Amro добавляет флеш () на каждую строку, фиксирует симптом, но означает изменение кода.

Одним из решений без изменения кода является отключение буферизации в Python с использованием флага «-u» в командной строке или установки переменной среды PYTHONUNBUFFERED.

 export PYTHONUNBUFFERED=1 /cydrive/c/Python27/python.exe foo.py 

или

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

или запустить в интерактивном режиме

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

Вы также не сможете запустить интерактивный режим Windows python.exe на терминале Cygwin. Это не вызовет интерактивный сеанс, а просто повесит. Я считаю, что лучшим решением является использование «cygstart» (лучше, чем использование опции «-i»):

 cygstart /cygdrive/c/Python27/python.exe 

И это похоже на работу с ipython (если установлено):

 cygstart /cygdrive/c/Python27/Scripts/ipython.exe 

Не отвечая на начальный вопрос, но для тех, кто хочет использовать интерактивный сеанс Python из терминала Cygwin (например, в mintty) – запустите Python с опцией -i, чтобы явно сказать, что он должен запускаться в интерактивном режиме:

 $ python -i 

Оптимальным способом также является создание псевдонима в вашем .bashrc (зная, что он все равно читается для сеансов интерактивных терминалов):

 alias python='python -i' 

В противном случае Python не будет знать, что он запускается в консоли, потому что все терминалы Cygwin pty (mintty, rxvt и xterm) распознаются как трубы Windows, а не как консоль. Поэтому Python считает, что консоль отсутствует и переходит в неинтерактивный режим. Итак, если вы все еще хотите использовать интерактивный режим, вам нужно явно указать Python на его использование. Тем не менее, он по-прежнему не будет вести себя так, как обычно, – один из них не сможет использовать клавиши HOME или LEFT ARROW и т. Д.

  • Python настраивает pdfkit для окон
  • pip install - PermissionError: Разрешение отклонено
  • Почему языки сценариев не выводят Unicode на консоль Windows?
  • Как установить PyQt5 в Windows?
  • Ошибка Windows-Pyinstaller «не удалось выполнить сценарий» Когда приложение было нажато
  • Ошибка при обновлении pip: UnicodeDecodeError: кодек «utf-8» не может декодировать байт
  • Совместим ли Tensorflow с рабочим процессом Windows?
  • Как захватить Shift + PrintScreen с pyHook?
  • Python - лучший язык программирования в мире.