2014-12-12 10 views
28

Merhaba gets.chomp ve argümanlarını kullanarak bir form hazırladığım basit bir ruby ​​komut dosyası yapıyorum, sorun şu anda gets.chomp kullanımı betik test argümanını uyguladığımda bana bir hata döndürür.using gets() komut dosyasıma argümanları geçtiğimde "Bu tür bir dosya veya dizin yok" hatası veriyor

kodu:

#!usr/bin/ruby 

def formulario(quien) 
    while (1) 
     print "[+] Word : " 
     word = gets.chomp 
     print quien + " -> " + word 
    end 
end 

quien = ARGV[0] 

formulario(quien) 

hatası:

[+] Word : C:/Users/test/test.rb:8:in `gets': No such file or directory @ rb_sysopen - test (Errno::E 
NOENT) 
     from C:/Users/test/test.rb:8:in `gets' 
     from C:/Users/test/test.rb:8:in `formulario' 
     from C:/Users/test/test.rb:17:in `<main>' 

Herkes yardımcı olabilir? Eğer STDIN bir çizgi okuyarak bazı giriş yazmak için kullanıcıya istedikleri gibi

+3

Sorununuzla ilgili değil, ancak '#! Usr/bin/ruby', bir'/'eksik; '#!/usr/bin/ruby' olmalıdır ... Bu sadece UNIX ve UNIX benzeri sistemler için gereklidir ve Windows'da gerçekten kullanılmaz (CygWin hariç). – Carpetsmoker

+0

olası kopyası [Ruby'de aynı program, komut satırı argümanlarının yanı sıra kullanıcı tarafından girişi nasıl kabul edebilir] (http://stackoverflow.com/questions/7399618/how-can-same-program-in-ruby-accept-input -den-kullanıcı-olarak-iyi-komut satırı-argu) – Carpetsmoker

cevap

54

görünüyor, bunu yapmanın en iyi yolu STDIN.gets değil gets arayarak olduğunu. Yani çizgi haline gelir:

word = STDIN.gets.chomp 

Bu IO.gets olarak belgelenmiştir. STDIN, IO'un bir örneğidir. Farklı bir şey (vurgu benim) yaptığı Şu anda, Kernel.gets infaz konum

: görünen bu ARGV boş STDIN.gets eğer gibi davranmaya

Returns (and assigns to $_) the next line from the list of files in ARGV (or $*), or from standard input if no files are present on the command line.

ama aynı şey değildir, dolayısıyla karışıklık.

+0

['STDIN'den okunmak için varsayılan değer alır] (http://www.ruby-doc.org/core-2.1.5/Kernel. html # method-i-gets), bu yüzden STDIN.gets gerekli değildir. –

+8

@theTinMan Aynı hatayı aldım ve STDIN'in benim için çalıştığını belirttim. –

+0

Bunun yerine STDIN.gets kullanarak bu sorunu benim için de çözdüm. – Harlin

İlgili konular