2012-09-20 23 views
6

Aquí es una función de ejemplo:¿Es posible leer desde la consola con escaneo sin repetir los caracteres?

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

Y para probar la función:

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

¿Hay una manera de suprimir lo que el usuario? ¿O lo reemplazas con algún otro personaje? Escribí una función tcl/tk para solicitar una contraseña al usuario, pero no funciona en nuestro servidor Linux.

Aquí hay un ejemplo del enlace de Paul a continuación. Esto no funciona ni en Linux ni en Windows (lo último probablemente porque no tengo un compilador de C adecuado, así que lo investigaré).

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

Y mi test.r guión:

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

me sale esto:

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

prueba 'gWidgets' en lugar de' tcl/tk'? –

+0

probado gWidgets. El problema es que no hay un sistema de ventanas en el servidor Linux. De hecho, no estoy seguro de que haya siquiera una tarjeta gráfica. – jbryer

Respuesta

4

Este post explica cómo leer las pulsaciones de teclas individuales:

Detecting single keystrokes

La respuesta aceptada utiliza un pequeño fragmento de código C que devuelve pulsaciones de teclas individuales. A continuación, puede capturar las teclas para su contraseña y no hacer eco de nada para el usuario o tal vez un *.

+0

Gracias Paul por el enlace. Sin embargo, esto tampoco parece funcionar. Edité mi publicación original para incluir mi intento de implementar su solución. Gracias por la ayuda de todos. – jbryer

Cuestiones relacionadas