2012-09-20 28 views
6

Oto przykład funkcja:Czy można odczytać z konsoli ze skanowaniem bez echa znaków?

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

I przetestować funkcję:

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

Czy istnieje sposób, aby stłumić jakie typy użytkownika? Lub zastąpić go inną postacią? Napisałem funkcję tcl/tk, aby zapytać użytkownika o hasło, ale nie działa na naszym serwerze Linux.

Oto przykład z linku Paula poniżej. Nie działa to ani w Linuksie, ani w Windowsie (ten ostatni prawdopodobnie dlatego, że nie mam odpowiedniego kompilatora C, więc to przyjrzę).

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

A moja test.r scenariusz:

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

uzyskać to:

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

spróbuj 'gWidgets' zamiast' tcl/tk'? –

+0

Wypróbowane gWidgety. Problem polega na tym, że na serwerze Linux nie ma systemu okienkowego. W rzeczywistości nie jestem pewien, czy jest nawet karta graficzna. – jbryer

Odpowiedz

4

Ten post dotyczy sposobu odczytywania pojedynczych klawiszy:

Detecting single keystrokes

Przyjęta odpowiedź wykorzystuje mały fragment kodu C, który zwraca poszczególne naciśnięcia klawiszy. Następnie można przechwycić naciśnięcia klawiszy dla hasła i nic nie echo do użytkownika lub może być *.

+0

Dzięki Paul za link. Jednak to też nie działa. Zmieniłem swój oryginalny post, aby uwzględnić moją próbę wdrożenia ich rozwiązania. Dzięki za pomoc wszystkich. – jbryer

Powiązane problemy