testowałem to na moim komputerze z systemem Windows i działa jeśli podasz exe Python:
C:\>C:\Python25\python.exe output.py | C:\Python25\python.exe input.py
Give me the greeting. The greeting is: hello
Ale otrzymuję również błąd EOFError, jeśli uruchomię polecenia bezpośrednio:
output.py | input.py
Nie jestem do końca pewien, dlaczego tak jest, wciąż się nad tym zastanawiam, ale przynajmniej powinno to teraz zapewnić obejście problemu. Może to mieć coś wspólnego ze sposobem wywoływania obsługi plików dla plików .py.
UPDATE: cóż, co ty wiesz. Wygląda na to, że jest to błąd w systemie Windows, w którym przekierowanie stdin/stdout może nie działać poprawnie po uruchomieniu ze skojarzenia plików. Tak więc obejście to jest tak samo zauważone przeze mnie i Patricka, musisz określić "python", będzie on uruchamiał plik input.py, w przeciwnym razie nie przekieruje stdout z output.py do stdin dla input.py poprawnie.
referencyjny:
http://mail.python.org/pipermail/python-bugs-list/2004-August/024923.html
http://support.microsoft.com/default.aspx?kbid=321788
UPDATE 2:
Aby zmienić to zachowanie i uczynić Rury Okna działa zgodnie z oczekiwaniami Przekierowanie stdin/stdout, możesz dodać tę wartość do rejestru (przetestowane na moim pudełku i sprawdzone, że działa zgodnie z życzeniem).
- Uruchom Edytor rejestru.
Zlokalizuj, a następnie kliknij następujący klucz w rejestrze:
HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ Explorer
W menu Edycja kliknij polecenie Dodaj wartość, a następnie dodaj następującą wartość rejestru:
nazwa wartość: InheritConsoleHandles typ
Dane: RE G_DWORD
Radix: dziesiętny
Dane wartości: 1
Zamknij Edytor rejestru.
Działa w języku Python 3.0. –
To znaczy, użyłem wejścia (..) zamiast raw_input (..) –
Zaktualizowałem swoją odpowiedź, aby wyjaśnić, dlaczego rozwiązanie zaproponowane przez Patricka i mnie proponujemy, a oryginał nie. – Jay