Ich habe eine Konsole Ruby-Skript erstellt, die ARGF verwendet, um Daten aus einer Datei oder Stdin zu laden, die dann Pry aufruft.Pry nicht zu stoppen, wenn von einem Ruby-Skript aus stdin aufgerufen
Das funktioniert großartig, wenn ich eine Datei übergebe (Pry pausiert) aber fehlschlägt (Pry stoppt nicht und beendet gerade Ruby), wenn ich meine Daten mit stdin übergebe.
Das ist seltsam, weiß jemand warum? Ich möchte Daten via Stdin weitergeben und Pry pausieren lassen.
Siehe, ein Beispielskript:
require 'rubygems'
require 'pry'
def pry_it(str)
binding.pry
end
pry_it(ARGF.read)
Wenn ich diese App mit einer Datei in ARGV nenne ich meine richtige Antwort zu erhalten - hebel
% bundle exec ruby pry_test.rb file.txt
From: /Users/wilcoxr/Development/json_pry/pry_test.rb @ line 8 Object#pry_it:
6: def pry_it(str)
7:
=> 8: binding.pry
9: end
[1] pry(main)>
Große Pause! Ich kann ausführen Pry Befehle alles, was ich will
Wenn ich versuche, STDIN zu verwenden, um Daten in mein Werkzeug zu senden: eng
% cat file.txt | bundle exec ruby pry_test.rb
From: /Users/wilcoxr/Development/json_pry/pry_test.rb @ line 8 Object#pry_it:
6: def pry_it(str)
7:
=> 8: binding.pry
9: end
[1] pry(main)>
%
Look: beachten Sie, ich bin wieder in meiner Shell-Prompt nicht in IRB hält inne. Seltsam! Ich verstehe nicht, warum ich dieses Verhalten bekomme ....
Ich vermute, Sie sind auf etwas. Ich glaube nicht, dass der Inhalt meiner Eingabedatei dazu führt, dass Pry Dinge macht ... aber ich stimme dir zu, dass STDIN auf unterhaltsame Weise mit PRY interagiert Weil hier ein weiteres Beispiel dafür ist: echo Hallo "| Bündel exec ruby pry_test.rb'. Dies gibt das gleiche Ergebnis wie oben: ein schneller Ausgang – RyanWilcox
Versuchen Sie, den oben genannten Code mit 'ruby pry_test.rb
mudasobwa
Ok, ja ich stimme zu. Ich überprüfte auch den TTY-Status von stdin (mit 'puts IO.pipe.map (&: tty?)') Und gibt false zurück. Ich nehme an, dass Pry von STDIN liest, entweder indem er Befehle von stdin liest oder sieht, dass wir am Ende von STDIN sind - weil wir alles lesen, wie in meinem Beispiel - UND dass wir kein interaktives Terminal sind und beenden. Also ähm ... wie komm ich rum, dass ich mich wundere ... – RyanWilcox