2012-09-20 31 views
6

下面是一個例子功能:是否可以通過掃描從控制檯讀取而不回顯字符?

passwordEntry <- function() { 
      cat("Enter your password: ") 
      pwd <- scan(n=1, what=character(), quiet=TRUE) 
      invisible(pwd) 
    } 

,並測試功能:

> passwordEntry() 
    Enter your password: 
    1: test 
    > 

有沒有辦法來抑制什麼類型的用戶?或者用一些其他角色替換它?我寫了一個tcl/tk函數來提示用戶輸入密碼,但它在我們的Linux服務器上不起作用。

下面是Paul的鏈接示例。這在Linux或Windows上都不起作用(後者可能是因爲我沒有一個合適的C編譯器,所以會考慮這一點)。

getkey3.c

#include <stdio.h> 
    #include <termios.h> 
    #include <unistd.h> 
    void mygetch (int *ch) 
    { 
      struct termios oldt, newt; 
      tcgetattr (STDIN_FILENO, &oldt); 
      newt = oldt; 
      newt.c_lflag &= ~(ICANON | ECHO); 
      tcsetattr (STDIN_FILENO, TCSANOW, &newt); 
      *ch = getchar(); 
      tcsetattr (STDIN_FILENO, TCSANOW, &oldt); 
      return; 
    } 

而且我test.r腳本:

system('R CMD SHLIB getkey3.c') 
    dyn.load("getkey3.so") 
    .C("mygetch",as.integer(0)) 
    dyn.unload("getkey3.so") 

我得到這個:

> .C("mygetch",as.integer(0)) 
    [[1]] 
    [1] -1 
+0

嘗試'gWidgets'而不是'tcl/tk'? –

+0

試過gWidgets。問題是Linux服務器上沒有Windowing系統。事實上,我不確定是否有圖形卡。 – jbryer

回答

4

這篇文章介紹瞭如何讀取各個按鍵:

Detecting single keystrokes

接受的答案使用返回單個按鍵的一小段C代碼。然後,您可以捕獲密碼的按鍵,並且不會向用戶回傳任何內容,或者可能是*

+0

感謝保羅的鏈接。但是,這似乎也不起作用。我編輯了我的原始文章,以包括我嘗試實施他們的解決方案。感謝大家的幫助。 – jbryer