Ruby $ stdin.gets没有在屏幕上显示字符

And*_*ock 24 ruby

我想要求用户输入密码,但我不希望字符在键入时显示在屏幕上.

我如何在Ruby中执行此操作?

Dro*_*roj 30

您可以使用IO /控制台模块中的STDIN.noecho方法:

require 'io/console'
pw = STDIN.noecho(&:gets).chomp
Run Code Online (Sandbox Code Playgroud)

  • `require'io/console'` (6认同)
  • 这是赢家。 (2认同)

gle*_*man 24

如果您使用的是以下系统stty:

`stty -echo`
print "Password: "
pw = gets.chomp
`stty echo`
puts ""
Run Code Online (Sandbox Code Playgroud)

  • 请不要宝石,我喜欢这个答案;-) (2认同)

Kon*_*ase 13

这种用户交互有一个宝石:高线.

password = ask("Password:  ") { |q| q.echo = false }
Run Code Online (Sandbox Code Playgroud)

甚至:

password = ask("Password:  ") { |q| q.echo = "*" }
Run Code Online (Sandbox Code Playgroud)

  • 如果用户的终端没有黑色背景怎么办? (10认同)

小智 6

您希望确保您的代码是幂等的......此处列出的其他解决方案假设您希望在重新打开echo的情况下退出此功能块.那么,如果在输入代码之前关闭它会怎样,并且预计会保持关闭状态?

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}"
Run Code Online (Sandbox Code Playgroud)