Ho creato uno script Ruby console che utilizza ARGF per caricare i dati da un file o stdin, che quindi chiama Pry.Fare leva non fermarsi quando viene chiamato da uno script Ruby che legge dallo stdin
Questo funziona perfettamente quando passo un file in (Pry pause) ma fallisce (Pry non si ferma ed esce da Ruby) quando passo i miei dati usando stdin.
Questo è strano, qualcuno sa perché? Vorrei passare i dati tramite stdin e fare in pausa Pry.
Ecco, uno script di esempio:
require 'rubygems'
require 'pry'
def pry_it(str)
binding.pry
end
pry_it(ARGF.read)
Quando chiamo questa app con un file in ARGV ho la mia risposta adeguata - leva pausa
% 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)>
Grande! Posso eseguire tutti i comandi leva voglio
Quando provo ad usare STDIN per inviare i dati in mio strumento:
% 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)>
%
sguardo da vicino: NOTA Sono tornato al mio prompt della shell, non pause nella IRB. Strano! Non capisco perché sto prendendo questo comportamento ....
Sospetto che tu stia partecipando a qualcosa. Non penso che sia il contenuto del mio file di input che induce Pry a fare cose ... ma sono d'accordo con te sul fatto che STDIN potrebbe interagire con PRY in modi divertenti Perché ecco un altro esempio di cosa succede: 'echo" ciao "| pacchetto exec ruby pry_test.rb'. Questo dà lo stesso risultato di cui sopra: una rapida uscita – RyanWilcox
Prova ad eseguire il codice sopra con 'ruby pry_test.rb
mudasobwa
Ok, sì sono d'accordo. Ho anche controllato lo stato TTY di stdin (con 'puts IO.pipe.map (&: tty?)'), E restituisce false. Quindi immagino che Pry legga da STDIN, o leggendo i comandi da stdin O vedendo che siamo alla fine di STDIN - perché lo leggiamo tutti, come il mio esempio - E che non siamo un terminale interattivo, ed esce. Quindi ummm ... come faccio a girarmi che mi chiedo ... – RyanWilcox