結論
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などのもう少し高水準なライブラリを作るのがよさそうである.