2016-08-09 6 views
0

Ich möchte einige Daten an ein Python-Skript mit Echo übergeben und danach den Benutzer zur Eingabe von Optionen befördern. Ich laufe durch eine EOFError die ich denke, passiert seit ich alle Daten in sys.stdin gelesen habe. Wie behebe ich dieses Problem? Vielen Dank!Python: Daten von stdin und raw_input lesen

code.py:

x = '' 
for line in sys.stdin: 
    x += line 
y = raw_input() 

Nutzung:

echo -e -n '1324' | ./code.py 

Fehler bei raw_input():

EOFError: EOF when reading a line 

Antwort

1

Sie können nicht nur Daten über stdin senden (das Umleiten) und dann zurück der interaktive Modus.

Wenn Sie a | b ausführen, kann b nicht mehr vom Standardeingang lesen. Wenn es das tun will, wird es aufhören, sobald a beendet und die Leitung bricht.

Aber wenn a endet, bedeutet es nicht, dass Sie erneut stdin erhalten.

Vielleicht könnten Sie so, wie Sie Dinge tun wollen ändern, Beispiel:

echo -n -e '1324' | ./code.py 

wird

./code.py '1234' '5678' 

und verwenden sys.argv[] den Wert von 1234 zu bekommen, 5678 ...

import sys 

x = '' 
for line in sys.argv[1:]: 
    x += line+"\n" 

y = raw_input() 

Wenn Sie viele Zeilen ausgeben müssen, übergeben Sie eine Argument, das eine Datei ist, und was werden Sie

import sys 

x = '' 
for line in open(sys.argv[1],"r"): 
    x += line 

y = raw_input() 
2

Einsatz Lesen:

{ echo -e -n '1324'; cat; } | ./code.py 

Erste echo schreibt die Zeichenkette an das Rohr, dann cat wird von der Standardeingabe lesen und kopieren, die auf die Rohr. Das Python-Skript sieht dies alles als Standardeingabe.

+0

Dies wird bei sys.stdin Leseschleife stecken – user3019917

+0

Haben Sie etwas eingegeben? Sie müssen etwas eingeben und dann Ctl-d eingeben, um EOF zu signalisieren. – Barmar

+0

Ich glaube ich verstehe jetzt was du meintest. Vielen Dank – user3019917