问题 读取用户输入而不回显


我想知道是否有一种方法可以从STDIN读取用户输入而不将其回显到R中的屏幕。我知道 readline()readLines() 和 scan() 可以从键盘读入用户输入,但似乎没有选项可以回显。

正如您所料,这是获取密码。所以我正在寻找能让我这样做的东西:

> a<-get_password()
Password:
> a
[1] "password"

10783
2018-03-01 12:12


起源

无法跨平台轻松完成,通常的解决方案是tcltk: stackoverflow.com/questions/2917202  - 但如果你真的需要它来自STDIN ...... - Spacedman
可能重复 R:安全地给R应用程序提供密码的方法? - Joris Meys


答案:


什么是操作系统?如果你可以从终端运行它,这应该工作。

get_password <- function() {
cat("Password: ")
system("stty -echo")
a <- readline()
system("stty echo")
cat("\n")
return(a)
}

> a <- get_password()
Password: 
> a
[1] "sdfs"
> 

这适用于OS X,使用来自Terminal.app的R,但不是来自R.app。不知道Windows解决方案,因为似乎没有本机R解决方案。


9
2018-03-01 12:43



这很棒,目前我只处理Mac / Linux,所以这将是完美的。谢谢! - David Lawrence Miller
这也适用于Linux(在Ubuntu上测试),正如预期的那样,它是基于UNIX的技巧。 - Ari B. Friedman


如果这是为了更具生产风格的环境,那么您可以考虑使用 R-的Tcl / Tk,具有密码输入的“显示”参数。


5
2018-03-01 13:38