Domanda

Sto provando qualcosa del genere

Output.py

print "Hello"

Input.py

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

Alla riga cmd

Output.py | Input.py

Ma restituisce un errore EOFE . Qualcuno può dirmi cosa sto facendo di sbagliato?

Grazie per il tuo aiuto.

MODIFICA
Patrick Harrington soluzione funziona ma io non non so perché ...

È stato utile?

Soluzione

L'ho provato sul mio computer Windows e funziona se specifichi Python exe:

C:\>C:\Python25\python.exe output.py | C:\Python25\python.exe input.py
Give me the greeting. The greeting is: hello

Ma ottengo un errore EOFE anche se eseguo i comandi direttamente come:

output.py | input.py 

Non sono sicuro del perché esattamente, sto ancora esaminando questo, ma almeno questo dovrebbe fornirti una soluzione alternativa per ora. Potrebbe avere qualcosa a che fare con il modo in cui il gestore di file viene invocato per i file .py.

AGGIORNAMENTO : bene, cosa sai. Sembra che questo sia in realtà un bug in Windows in cui il reindirizzamento stdin / stdout potrebbe non funzionare correttamente quando avviato da un'associazione di file. Quindi la soluzione alternativa è come ho notato io e Patrick, è necessario specificare "python" eseguirà input.py, altrimenti non reindirizzerà stdout da output.py allo stdin per input.py correttamente.

Riferimento :

http: //mail.python .org / pipermail / python-bugs-list / 2004-August / 024923.html

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

AGGIORNAMENTO 2 :

Per modificare questo comportamento e far funzionare le pipe di Windows come previsto per il reindirizzamento stdin / stdout, puoi aggiungere questo valore al registro (testato sulla mia scatola e verificato che funzioni come desiderato).

  
      
  1. Avvia l'editor del registro.
  2.   
  3. Individua e quindi fai clic sulla seguente chiave nel registro:

         

    HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows \ CurrentVersion \ Policies \ Explorer

  4.   
  5. Dal menu Modifica, fare clic su Aggiungi valore, quindi aggiungere quanto segue   valore del registro:

         

    Nome valore: InheritConsoleHandles
        Tipo di dati: REG_DWORD
        Radix:
    decimale     Dati valore: 1

  6.   
  7. Chiudi l'editor del registro.

  8.   

Altri suggerimenti

Modificalo in:

Output.py | python Input.py

L'output sarà:

  

Dammi il saluto. Il saluto è: ciao

Ecco perché ottieni EOFError (dalla documentazione su raw_input):

  

La funzione quindi legge una riga da   input, lo converte in una stringa   (spogliando una nuova riga finale), e   restituisce quello. Quando viene letto EOF,   EOFError viene generato.

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

Potresti voler usare sys.stdin , fornisce un oggetto file dal quale puoi usare i metodi read, readlines.

import sys
for greeting_line in sys.stdin.readlines():
    print "The greeting is:", greeting_line.strip()
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top