Я запускаю Ruby и MySQL в Windows.
У меня есть код Ruby, которому необходимо подключиться к базе данных MySQL и выполнить выбор. Чтобы подключиться к базе данных, мне, помимо прочего, нужно указать пароль.
Код Ruby может отображать подсказку с запросом пароля, пользователь вводит пароль и нажимает клавишу Enter. Мне нужно, чтобы пароль по мере его ввода отображался в виде строки звездочек.
Как заставить Ruby отображать введенный пароль в виде строки звездочек в поле «dos»?

Бедняжка:
system "stty -echo"
# read password
system "stty echo"
Или используя http://raa.ruby-lang.org/project/ruby-password/
The target audience for this library is system administrators who need to write Ruby programs that prompt for, generate, verify and encrypt passwords.
Редактировать: Упс, я не заметил, что вам это нужно для Windows :(
пароль = STDIN.noecho (&: получает) .chomp; # <- это тоже должно работать (возможно, не для windows)
Чтобы ответить на мой собственный вопрос и для пользы всех, кто хотел бы знать, вам нужен Ruby gem под названием HighLine.
require 'rubygems'
require 'highline/import'
def get_password(prompt = "Enter Password")
ask(prompt) {|q| q.echo = false}
end
thePassword = get_password()
highline у меня не сработал, он все равно повторял пароль. Я думаю, что это было связано с тем, что termios не был установлен, но он все еще не работал после установки ruby-termios. Вместо этого я использовал рубиновый пароль.
Согласно документу Highline, похоже, это работает. Не уверен, будет ли он работать в Windows.
#!/usr/local/bin/ruby
require 'rubygems'
require 'highline/import'
username = ask("Enter your username: ") { |q| q.echo = true }
password = ask("Enter your password: ") { |q| q.echo = "*" }
Вот вывод на консоль:
$ ruby highline.rb
Enter your username: doug
Enter your password: ******
Если вы запускаете сценарий с помощью команды ruby, вам не нужен #!/usr/local/bin/ruby, если бы вы запускали сценарий напрямую с ./highline.rb, вам нужно.
Позвольте мне добавить, что обычно #! / Usr / bin / env ruby лучше в качестве первой строки, поскольку он находит установку ruby независимо от того, где она находится.
Следующие работы (lobin.rb) в ruby not jruby
require 'highline/import'
$userid = ask("Enter your username: ") { |q| q.echo = true }
$passwd = ask("Enter your password: ") { |q| q.echo = "*" }
Вывод с консоли:
E:\Tools>ruby login.rb
Enter your username: username
Enter your password: ********
Howerver, если я запускаю jruby, он не работает и не дает возможности ввести пароль.
E:\Tools>jruby login.rb
Enter your username: username
Enter your password:
В геме fancy_gets есть пароль, который отлично работает с jruby:
https://github.com/lorint/fancy_gets
Код заканчивается так:
require 'fancy_gets'
include FancyGets
puts "Password:"
pwd = gets_password
# ...
Начиная с Ruby 2.3, вы можете использовать метод IO#getpass как таковой:
require 'io/console'
STDIN.getpass("Password: ")
http://ruby-doc.org/stdlib-2.3.0/libdoc/io/console/rdoc/IO.html#method-i-getpass
Вышеупомянутое скопировано из удаленного ответа Зоран Майсторович.
Хороший. И как говорится в документации: «Для использования этого метода вам необходимо потребовать 'io / console'».
Я пробовал это в сочетании с readline, и я все еще мог видеть пароль