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
Sie ein lauffähiges Beispiel bieten könnte? – Stefan
Ja. Siehe bearbeitete Frage. – Jenny
Stellen Sie sicher, dass ein Leerzeichen nach "do" und Einzug mit zwei Leerzeichen vorhanden ist. –