Das eigentliche Problem ist, dass die Cygwin-Terminalprogramme wie mintty nicht als Windows-Konsolen fungieren, wenn Sie einen Befehl ausführen. Das tun nur die Windows-Konsolenprogramme wie CMD oder Console2. Mit Cygwin-Terminals denkt die Windows python.exe also nicht, dass sie mit einer interaktiven Konsole spricht.
Das führt dazu, dass die Ausgabe gepuffert wird, anstatt die Puffer bei jeder Zeile zu leeren, wie es bei interaktiven Sitzungen der Fall ist. Deshalb behebt Amros Hinzufügen von flush() in jeder Zeile das Symptom, bedeutet aber eine Änderung des Codes.
Eine Lösung, ohne den Code zu ändern, besteht darin, die Pufferung in Python mit dem Flag '-u' auf der Befehlszeile oder durch Setzen der Umgebungsvariablen PYTHONUNBUFFERED zu deaktivieren.
export PYTHONUNBUFFERED=1
/cydrive/c/Python27/python.exe foo.py
ou
/cydrive/c/Python27/python.exe -u foo.py
oder im interaktiven Modus ausführen
/cydrive/c/Python27/python.exe -i foo.py
Sie werden auch nicht in der Lage sein, den interaktiven Modus von Windows python.exe im Cygwin-Terminal auszuführen. Es wird keine interaktive Sitzung gestartet, sondern bleibt einfach hängen. Die beste Lösung scheint mir die Verwendung von "cygstart" zu sein (besser als die Verwendung der Option "-i"):
cygstart /cygdrive/c/Python27/python.exe
Und das scheint auch mit ipython zu funktionieren (falls installiert):
cygstart /cygdrive/c/Python27/Scripts/ipython.exe
1 Stimmen
Haben Sie versucht, die bash.exe von einer DOS-Eingabeaufforderung aus zu starten? Ich denke, dies wird Ihre Probleme lösen, ohne dass Sie die Option -i oder die Variable PYTHONUNBUFFERED verwenden müssen. Lassen Sie mich wissen, ob es bei Ihnen funktioniert.
0 Stimmen
Verwandt: stackoverflow.com/questions/13588454/