Kullanıcılardan bir parola yazmasını istemek istiyorum ancak karakterlerin yazarken ekranda görünmesini istemiyorum.
Bunu Ruby'de nasıl yapıyorum?
Kullanıcılardan bir parola yazmasını istemek istiyorum ancak karakterlerin yazarken ekranda görünmesini istemiyorum.
Bunu Ruby'de nasıl yapıyorum?
Böyle bir kullanıcı etkileşimi için bir mücevher var: highline.
password = ask("Password: ") { |q| q.echo = false }
Hatta: Eğer stty
ile bir sistemde iseniz
password = ask("Password: ") { |q| q.echo = "*" }
: Glenn ama daha tam olarak
`stty -echo`
print "Password: "
pw = gets.chomp
`stty echo`
puts ""
Hayır cevher lütfen, ben bu cevabı beğeniyorum ;-) – lzap
Bu çözümdür UNIX sistemleri için:
begin
system "stty -echo"
print "Password: "; pass1 = $stdin.gets.chomp; puts "\n"
print "Password (repeat): "; pass2 = $stdin.gets.chomp; puts "\n"
if pass1 == pass2
# DO YOUR WORK HERE
else
STDERR.puts "Passwords do not match!"
end
ensure
system "stty echo"
end
Sen kod İdempotent olduğundan emin olmak için ... Burada listelenen diğer çözümleri yankı ile işlevsellik bu öbek çıkmak istiyor geri döndü varsayalım. Peki, kodu girmeden önce kapatılmışsa ve uzak durması bekleniyorsa?
stty_settings = %x[stty -g]
print 'Password: '
begin
%x[stty -echo]
password = gets
ensure
%x[stty #{stty_settings}]
end
puts
print 'regular info: '
regular_info = gets
puts "password: #{password}"
puts "regular: #{regular_info}"
Sen IO/konsol modülünden STDIN.noecho yöntemi kullanabilirsiniz:
pw = STDIN.noecho(&:gets).chomp
tatlı! (15chars) – st0le
Kullanıcının terminali siyah arka plana sahip değilse ne olur? –
sadece kendi içinde bir komut dosyası için, bu yüzden bir sorun değil :) –