LoginSignup
3
1

More than 5 years have passed since last update.

メモ: コンソールで入力を表示させない(Python)

Last updated at Posted at 2018-06-22

結論

termiosモジュールで,端末の設定を変えてやればよい(一文字ずつ取るならばttyモジュールなどでもよさそう.)
以下のようなサンプルコードが載っている.

def getpass(prompt="Password: "):
    import termios, sys
    fd = sys.stdin.fileno()
    old = termios.tcgetattr(fd)
    new = termios.tcgetattr(fd)
    new[3] = new[3] & ~termios.ECHO          # lflags
    try:
        termios.tcsetattr(fd, termios.TCSADRAIN, new)
        passwd = input(prompt)
    finally:
        termios.tcsetattr(fd, termios.TCSADRAIN, old)
    return passwd

何をやっているかというと,termiosのオプション(ビット列)に対してECHO(エコーバック)をするためのフラグを切っているのだと思われる.

モチベーション

pythonで端末で遊べるゲームっぽいものを作るとしたとき,入力が一瞬でも表示されるのは嫌だなと思ったが,入力を表示させない方法としてググっても出てきたのがgetpassを使うという内容ばかりだった.C++に対してはここ解答が示されていたが,pythonはあまり見当たらなかったので探した.
まあコンソールで遊べるゲームを使うならば,cursesなどのもう少し高水準なライブラリを作るのがよさそうである.

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1