Frage

Ich bin so etwas wie diese versuchen,

Output.py

print "Hello"

Input.py

greeting = raw_input("Give me the greeting. ")
print "The greeting is:", greeting

In der cmd Zeile

Output.py | Input.py

Aber es gibt ein EOFError . Kann mir jemand sagen, was ich falsch mache?

Danke für Ihre Hilfe.

Bearbeiten
Patrick Harrington Lösung funktioniert, aber ich don‘ t wissen, warum ...

War es hilfreich?

Lösung

Getestet habe ich diese auf meinem Windows-Rechner 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 erhalte eine EOFError auch wenn die Befehle direkt als ausgeführt wird:

output.py | input.py 

ich genau bin nicht sicher, warum das so ist, suche ich noch in dieser ein, aber zumindest sollte man mit einer Abhilfe für jetzt zur Verfügung stellen. Es kann etwas mit der Art und Weise zu tun hat, die Datei-Handler für .py Dateien aufgerufen werden.

UPDATE : na ja, was tun Sie wissen. Sieht aus wie dies tatsächlich ein Fehler in Windows ist, wo stdin / stdout Umleitung nicht richtig funktionieren kann, wenn sie von einer Dateizuordnung gestartet. So ist die Abhilfe ist, wie von mir und Patrick erwähnt, müssen Sie angeben, „Python“ wird input.py laufen, sonst wird es nicht stdout von output.py zum stdin für input.py richtig umleiten.

Referenz :

http: //mail.python .org / pipermail / python-Fehler-Liste / 2004-August / 024923.html

http://support.microsoft.com/default.aspx?kbid = 321.788

UPDATE 2 :

Um dieses Verhalten zu ändern und Windows Rohre funktioniert wie für stdin / stdout Umleitung erwartet Sie diesen Wert in der Registrierung hinzufügen kann (getestet auf meiner Box und überprüft dies funktioniert wie gewünscht).

  
      
  1. Starten Sie den Registrierungs-Editor.
  2.   
  3. Suchen Sie und klicken Sie dann auf den folgenden Schlüssel in der Registrierung:

         

    HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ Currentversion \ Policies \ Explorer

  4.   
  5. Auf dem Menü Bearbeiten auf Wert hinzufügen, und fügen Sie den folgenden   Registrierungswert:

         

    Wertname: InheritConsoleHandles
        Datentyp: REG_DWORD
        Basis: Dezimal
        Wertdaten: 1

  6.   
  7. Registrierungs-Editor beenden.

  8.   

Andere Tipps

Ändern Sie es an:

Output.py | python Input.py

Der Ausgang wird sein:

  

Geben Sie mir den Gruß. Die Begrüßung ist: Hallo

Hier ist, warum Sie die EOFError (aus der Dokumentation auf raw_input) erhalten:

  

Die Funktion liest dann eine Zeile aus   Eingang, wandelt es in einen String   (Strippen ein nachlauf Neue-Zeile), und   kehrt das. Wenn EOF gelesen wird,   EOFError angehoben wird.

http://docs.python.org/library/functions .html? highlight = raw_input # raw_input

Sie möchten verwenden sys.stdin , es bietet ein Dateiobjekt, von dem Sie die Lese verwenden können, Methoden readlines.

import sys
for greeting_line in sys.stdin.readlines():
    print "The greeting is:", greeting_line.strip()
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top