2009-12-10 10 views
38

Sono piuttosto nuovo a Ruby e oggi ho scritto un'applicazione che è possibile passare argomenti tramite ARGV. Ma all'interno della mia applicazione, voglio essere in grado di usare "ottiene". Il problema è che ogni volta che provo a farlo, ottengo un errore.Kernel # ottiene tentativi di leggere il file invece dell'input standard

Ecco un semplice script che mostra il mio problema:

print "Say something! " 
input = gets 

Se lo chiamerei che in questo modo:

$ ruby script.rb this is arguments 

ottengo questo errore:

script.rb:2:in `gets': No such file or directory - this (Errno::ENOENT) 
from script.rb:2 

Speranza qualcuno è in grado di aiutarmi a risolvere questo, quindi posso continuare il mio viaggio in Ruby. :)

Modifica: Sono consapevole che "Get" non recupererà gli argomenti passati al file. "Get" interrogherà l'utente per l'input. Voglio essere in grado di utilizzare entrambi questi metodi all'interno della mia applicazione.

risposta

80

Se ci sono argomenti, il metodo di default gets tenta di trattare il primo come un file e leggere da quello. Per leggere da $stdin in una tale situazione, è necessario utilizzare in modo esplicito:

print "Say something! " 
input = $stdin.gets 
+0

Grazie mille. :) – Sirupsen

+5

stackoverflow; permettendomi di fare il mio lavoro meglio ogni giorno – lyonsinbeta

+0

Grazie mucho Chuck. – welbornio

Problemi correlati