2012-09-20 9 views
6

Ecco un esempio di funzione:È possibile leggere dalla console con scansione senza eco i caratteri?

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

E per testare la funzione:

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

C'è un modo per sopprimere ciò che l'utente digita? O sostituirlo con qualche altro personaggio? Ho scritto una funzione tcl/tk per richiedere all'utente una password ma non funziona sul nostro server Linux.

Ecco un esempio dal link di Paolo in basso. Questo non funziona né su Linux né su Windows (quest'ultimo probabilmente perché non ho un compilatore C adeguato, quindi cercherò di farlo).

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; 
    } 

E il mio test.r script:

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

ottengo questo:

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

provare 'gWidgets' anziché' tcl/tk'? –

+0

Provato gWidgets. Il problema è che non esiste un sistema Windowing sul server Linux. In effetti, non sono sicuro che ci sia anche una scheda grafica. – jbryer

risposta

4

Questo post spiega come leggere le singole battute:

Detecting single keystrokes

La risposta accettata utilizza un piccolo pezzo di codice C che restituisce singole combinazioni di tasti. È quindi possibile acquisire le sequenze di tasti per la propria password e non fare eco all'utente o forse a *.

+0

Grazie Paul per il link. Tuttavia, questo non sembra funzionare. Ho modificato il mio post originale per includere il mio tentativo di implementare la soluzione. Grazie per l'aiuto di tutti. – jbryer

Problemi correlati