Question

J'essaie quelque chose comme ça

Output.py

print "Hello"

Input.py

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

À la ligne de commande

Output.py | Input.py

Mais il retourne un EOFError . Quelqu'un peut-il me dire ce que je fais mal?

Merci de votre aide.

MODIFIER
Patrick Harrington, la solution fonctionne mais je ne le fais pas Je ne sais pas pourquoi ...

Était-ce utile?

La solution

J'ai testé cela sur ma machine Windows et cela fonctionne si vous spécifiez l'exe Python:

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

Mais je reçois également une erreur EOFError si les commandes sont exécutées directement en tant que:

output.py | input.py 

Je ne sais pas exactement pourquoi, je suis toujours à la recherche de celui-ci mais au moins, cela devrait vous fournir une solution de contournement pour le moment. Cela peut avoir quelque chose à voir avec la façon dont le gestionnaire de fichiers est appelé pour les fichiers .py.

MISE À JOUR : que savez-vous? Cela ressemble en fait à un bogue dans Windows où la redirection stdin / stdout peut ne pas fonctionner correctement lorsqu’elle est démarrée à partir d’une association de fichiers. Donc, la solution de contournement est celle indiquée par Patrick et moi-même, vous devez spécifier "python". exécutera input.py, sinon la redirection stdout de output.py ne sera pas redirigée vers stdin pour input.py correctement.

Référence :

http: //mail.python .org / pipermail / python-bugs-list / 2004-août / 024923.html

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

UPDATE 2 :

Pour modifier ce comportement et faire en sorte que les canaux Windows fonctionnent comme prévu pour la redirection stdin / stdout, vous pouvez ajouter cette valeur au registre (testé sur ma machine et vérifié que cela fonctionne comme prévu).

  
      
  1. Démarrez l'Éditeur du Registre.
  2.   
  3. Recherchez, puis cliquez sur la clé suivante dans le registre:

         

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

  4.   
  5. Dans le menu Edition, cliquez sur Ajouter une valeur, puis ajoutez les éléments suivants   valeur de registre:

         

    Nom de la valeur: InheritConsoleHandles
        Type de données: REG_DWORD
        Radix: décimal
        Données de la valeur: 1

  6.   
  7. Quittez l'Éditeur du Registre.

  8.   

Autres conseils

Changez-le en:

Output.py | python Input.py

Le résultat sera:

  

Donnez-moi la salutation. La salutation est: bonjour

Voici pourquoi vous obtenez l'erreur EOFError (indiquée dans la documentation sur raw_input):

  

La fonction lit alors une ligne de   input, le convertit en chaîne   (suppression d'une nouvelle ligne), et   retourne ça. Quand EOF est lu,   EOFError est déclenché.

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

Vous pouvez utiliser sys.stdin , il fournit un objet fichier à partir duquel vous pouvez utiliser les méthodes read, readlines.

import sys
for greeting_line in sys.stdin.readlines():
    print "The greeting is:", greeting_line.strip()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top