Ruby $ stdin.gets без отображения символов на экране - PullRequest
21 голосов
/ 13 сентября 2010

Я хочу попросить пользователей ввести пароль, но я не хочу, чтобы символы отображались на экране при вводе.

Как мне это сделать в Ruby?

Ответы [ 6 ]

26 голосов
/ 29 марта 2015

Вы можете использовать метод STDIN.noecho из модуля ввода / вывода:

require 'io/console'
pw = STDIN.noecho(&:gets).chomp
24 голосов
/ 13 сентября 2010

Если вы используете систему с stty:

`stty -echo`
print "Password: "
pw = gets.chomp
`stty echo`
puts ""
13 голосов
/ 13 сентября 2010

Для такого взаимодействия с пользователем есть драгоценный камень: highline .

password = ask("Password:  ") { |q| q.echo = false }

Или даже:

password = ask("Password:  ") { |q| q.echo = "*" }
6 голосов
/ 22 мая 2012

Вы хотите убедиться, что ваш код идемпотентен ... другие решения, перечисленные здесь, предполагают, что вы хотите выйти из этой части функциональности с включенным эхом.Ну, что, если он был выключен перед вводом кода, и ожидается, что он останется выключенным?

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}"
2 голосов
/ 24 апреля 2012

Это решение для систем UNIX :

  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
0 голосов
/ 16 августа 2011

Такой же ответ, как у Гленна, но более полный: http://dmathieu.com/articles/development/ruby-console-ask-for-a-password/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...