2017-02-15 5 views
0

Ich benutze die Shoes-Bibliothek, um einen Ruby-Code auszuführen, und habe entdeckt, dass er den Ruby-Code als File-Input behandelt und mir somit kein STDIN mehr erlaubt (da ARGF File Input oder STDIN erlaubt, aber anscheinend nicht beide).Abrufen von Dateieingabe UND STDIN von ARGF?

Gibt es trotzdem eine Überschreibung? Mir wurde gesagt, Perl, zum Beispiel, erlaubt Ihnen, von STDIN zu lesen, sobald der IO-Puffer leer ist.

Edit:

ich einen gewissen Erfolg gehabt haben mit dem „-“ spezielle Dateinamen Zeichen, die offenbar ein Signal an STDIN auf der Kommandozeile zu wechseln ist.

Vorherige Form der Frage: Ist Schuhe ARGF gebrochen?

Mit allgemeinen Ruby kann ich entweder Dateien oder Standard In mit ARGF lesen. Mit Shoes kann ich nur Dateien lesen. Alles vom Standard wird einfach ignoriert. Isst es Standard oder gibt es einen anderen Weg, um darauf zuzugreifen?

Beispiel Codezeilen: Entweder alleine in einer Ruby-Datei oder in einer Shoes-App in Schuhen.

#ruby testargf.rb aus.txt is the same as ruby testargf.rb<aus.txt 
#but isn't in shoes. shoes only prints with the first input, not the second 
ARGF.each do |line| #readLine.each has same result 
    puts line 
end 

oder in Schuhe:

#shoes testargfshoes.rb aus.txt should be the same as <aus.txt but isn't. 
Shoes.app(title: "File I/0 test",width:800,height:650) do 
    ARGF.each do |line| #readLine.each has same result 
     puts line 
     para line 
    end 
end 

Im Nachhinein sehe ich auch einen weiteren Unterschied zwischen Schuhe und Ruby: Schuhe auch den Quellcode des Programms druckt mir läuft, zusammen mit allen Dateien, die ich weitergeben kann. Wenn ich versuche, eine Datei als Standard einzugeben, wird NUR der Quellcode gedruckt.

Ich denke, dies bedeutet, dass die Schuhe App mein Programm als Eingabe nimmt, und dann nicht sanitizing (oder was auch immer das richtige Wort wäre) die Eingabe, wenn es es an meinen Code weitergibt. Dies scheint meine "Shoes eats Standard In" Hypothese zu stärken, da es eindeutig Standard für etwas verwendet. Ich denke, es zwei Dateien in einer Reihe nehmen, aber nicht eine Datei und dann einen Verweis auf die Norm in

Ich kann bestätigen, dass Ruby ohne Schuhe bietet identisches Verhalten, wenn ich Dateieingabe und STDIN mischen mit:.

ruby testargf.rb aus_simple.txt < testargf.rb 
+1

Sie ein lauffähiges Beispiel bieten könnte? – Stefan

+0

Ja. Siehe bearbeitete Frage. – Jenny

+0

Stellen Sie sicher, dass ein Leerzeichen nach "do" und Einzug mit zwei Leerzeichen vorhanden ist. –

Antwort

0

Ich hatte einige Erfolge mit dem speziellen Dateinamen "-", der anscheinend ein Signal ist, um auf STDIN in der Befehlszeile zu wechseln.

Beispiel:

shoes testargfshoes.rb - <aus_simple.txt 

Sie das nicht passieren „-“ ohne jeden Standard Nebenbei macht es hängen.

hier die Antwort gefunden: https://robots.thoughtbot.com/rubys-argf