ich diese auf meinem Windows-Rechner getestet und es funktioniert, wenn Sie den Python exe angeben:
C:\>C:\Python25\python.exe output.py | C:\Python25\python.exe input.py
Give me the greeting. The greeting is: hello
Aber ich bekomme einen EOFError auch, wenn ich die Befehle direkt als ausführen:
output.py | input.py
Ich bin mir nicht sicher, warum genau das ist, ich schaue immer noch in dieses Thema, aber zumindest sollte dir das jetzt einen Workaround bieten. Es hat möglicherweise etwas damit zu tun, wie der Dateihandler für .py-Dateien aufgerufen wird.
UPDATE: nun, was weißt du. Sieht aus, als wäre dies ein Fehler in Windows, bei dem die stdin/stdout-Umleitung möglicherweise nicht richtig funktioniert, wenn sie von einer Dateiassoziation gestartet wird. So ist die Problemumgehung wie von mir und Patrick bemerkt, Sie müssen angeben, dass "python" input.py ausführen wird, andernfalls wird stdout von output.py nicht korrekt in die stdin für input.py umgeleitet.
Referenz:
http://mail.python.org/pipermail/python-bugs-list/2004-August/024923.html
http://support.microsoft.com/default.aspx?kbid=321788
UPDATE 2:
Um dieses Verhalten zu ändern und Windows Rohre wie erwartet arbeiten stdin/stdout redirection, Sie können diesen Wert der Registrierung hinzufügen (getestet auf meiner Box und verifiziert, das funktioniert wie gewünscht).
- Starten Sie den Registrierungseditor.
Suchen Sie und klicken Sie dann auf den folgenden Schlüssel in der Registrierung:
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ Currentversion \ Policies Explorer \
Auf dem Menü Bearbeiten auf Wert hinzufügen, und dann fügen Sie den folgenden Wert Registrierung:
Wertname: InheritConsoleHandles
Datentyp: RE G_DWORD
Basis: Dezimal
Wertdaten: 1
Beenden Sie den Registrierungseditor.
Dies funktioniert in Python 3.0. –
Das heißt, ich verwendete Eingabe (..) anstelle von Raw_Input (..) –
Ich habe meine Antwort aktualisiert, um zu erklären, warum die Lösung Patrick und ich schlug vor, funktioniert und das Original nicht. – Jay