LoginSignup
0
0

More than 5 years have passed since last update.

SpyderでgetpassのWarningが表示されるときの応急処置

Posted at

環境

$ cat /etc/issue
Ubuntu 18.04.1 LTS \n \l
$ python3 --version
Python 3.6.5

症状

getpass を使用したプログラムを Spyder を用いてデバックする際, Warning が表示され,入力したパスワードが表示されてしまう.

no_distinguish_getpass.py
import getpass
p = getpass.getpass('Using getpass: ')
print('Read:', p)

Terminalで実行したとき

Terminalで実行したとき
$ python3 no_distinguish_getpass.py 
Using getpass:  # 入力したパスワードが表示されない(正常)
Read: password

Spyderで実行したとき

Spyderで実行したとき
Warning: QtConsole does not support password mode, the text you type will be visible.  #  Warningが表示される
Using getpass: password  # 入力したパスワードが表示されてしまう
Read: password

やりたいこと

とりあえず,Spyderではdebugのためだけに使用するため,Spyderで実行してしまった際に,getpassの部分をexceptできるようにする.

結論

if sys.stdin.isatty(): を使用する.

理由

PyMOTWによると

Unix 環境では、 getpass() はターミナル経由で制御できる tty を常に必要とするので表示を無効にできます。これは非ターミナルストリームから標準入力へリダイレクトしてもその入力文字が読み込まれないことになります。
入力ストリームが tty ではないときは呼び出し側で検出して、そのときは代替方法で読み込みます。

という.が,いまいち意味が分からん

distinguish_getpass.py
import getpass
import sys

if sys.stdin.isatty():
    p = getpass.getpass('Using getpass: ')
    print('Read:', p)
else:
    print("Could not use getpass")  # ここで,Spyder使用時の動作を決めれば良い

Terminalで実行したとき

Terminalで実行したとき
$ python3 distinguish_getpass.py 
Using getpass: 
Read: password

Spyderで実行したとき

Spyderで実行したとき
Could not use getpass

一応,Spyderを用いたdebug時の不具合は回避可能となる.

参考文献

getpass – パスワードのために入力文字を表示しないプロンプト

0
0
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
0
0