【发布时间】:2015-02-19 00:15:39
【问题描述】:
我正在用 Swift 为 OS X 编写一个命令行应用程序。我需要提示输入用户名和密码(不是计算机上的用户帐户,也不是保存在钥匙串中的凭据)。我可以提示输入用户名就好了:
func getInput() -> String {
var keyboard = NSFileHandle.fileHandleWithStandardInput()
var inputData = keyboard.availableData
return NSString(data: inputData, encoding:NSUTF8StringEncoding)!.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
}
let username = getInput()
我也想提示输入密码,但它会在用户键入密码时在控制台中打印密码。如何在不回显到控制台的情况下接受来自 STDIN 的输入?
请注意,我需要应用程序是交互式的,用户永远不会将用户名和密码作为命令行参数传递,因此 argv 不是正确答案。
例如,在 Ruby 中执行此操作时,您将输入:
require 'io/console'
puts "Enter your password"
@password = STDIN.noecho(&:gets).chomp
然后它会在屏幕上显示为这个图像:
无论输入多少个字母,它都只显示带有点的蓝色框。它不会将密码打印到屏幕上,也不会显示 ********* 作为密码。
是否可以在命令行 OS X 应用程序中使用 Swift 或 Objective-C 做同样的事情?
【问题讨论】:
标签: objective-c macos swift