我在Windows机器上运行Ruby和MySQL。
我有一些需要连接MySQL数据库的Ruby代码执行select。要连接到数据库,我需要提供密码等。
Ruby代码可以显示请求密码的提示,用户输入密码并按Enter键。我需要的是密码,因为它是键入的,显示为一行星号。
如何让Ruby在'dos box'中将键入的密码显示为一行星号?
答案 0 :(得分:50)
要回答我自己的问题,并且为了其他任何想知道的人的利益,你需要一个名为HighLine的Ruby宝石。
require 'rubygems'
require 'highline/import'
def get_password(prompt="Enter Password")
ask(prompt) {|q| q.echo = false}
end
thePassword = get_password()
答案 1 :(得分:24)
穷人的解决方案:
system "stty -echo"
# read password
system "stty echo"
或使用http://raa.ruby-lang.org/project/ruby-password/
该库的目标受众是需要编写提示,生成,验证和加密密码的Ruby程序的系统管理员。
编辑:哎呀我没注意到你在Windows上需要这个:(
答案 2 :(得分:12)
根据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: ******
答案 3 :(得分:3)
以下作品(lobin.rb)在ruby中不是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: ********
如果我在jruby中运行它会失败并且没有机会输入您的密码。
E:\Tools>jruby login.rb
Enter your username: username
Enter your password:
答案 4 :(得分:3)
从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
上述内容是通过Zoran Majstorovic从已删除的答案中复制的。
答案 5 :(得分:0)
fancy_gets gem有一个密码可以和jruby一起使用:
https://github.com/lorint/fancy_gets
代码最终如下:
require 'fancy_gets'
include FancyGets
puts "Password:"
pwd = gets_password
# ...