2012-09-20 11 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

'tcl/tk'の代わりに' gWidgets'を試してみませんか? –

+0

試したgWidgets。問題は、LinuxサーバにWindowingシステムがないことです。実際には、グラフィックスカードがあるかどうかはわかりません。 – jbryer

答えて

4

をこのポストには、個々のキーストロークを読み取る方法を説明します。

Detecting single keystrokes

答えには、個々のキーストロークを返す小さなCコードが使用されています。その後、パスワードのキーストロークをキャプチャして、ユーザには何も返信しないか、おそらく*を返すことができます。

+0

リンクにPaulに感謝します。しかし、これはどちらもうまくいかないようです。自分のオリジナルの投稿を編集して、自分のソリューションを実装しようとしました。誰もが助けてくれてありがとう。 – jbryer