私は、Windowsの下でPythonでコンソールプログラムを書いています。
ユーザーがプログラムを使用するにはログインする必要があります。パスワードを入力するときに、ユーザーが入力できる内容を取得できる間に「*」と表示されたいと思います。
標準ライブラリでgetpassというモジュールが見つかりましたが、入力すると何も表示されません(linuxのようなものです)。
ありがとうございます。Pythonコンソールプログラムでecho "*"を使ってパスワードを読む方法は?
答えて
getpass
モジュールはPythonで書かれています。これを行うには簡単に修正することができます。実際には、ここであなたは自分のコードに貼り付けることができgetpass.win_getpass()
の修正版がある:
import sys
def win_getpass(prompt='Password: ', stream=None):
"""Prompt for password with echo off, using Windows getch()."""
import msvcrt
for c in prompt:
msvcrt.putch(c)
pw = ""
while 1:
c = msvcrt.getch()
if c == '\r' or c == '\n':
break
if c == '\003':
raise KeyboardInterrupt
if c == '\b':
pw = pw[:-1]
msvcrt.putch('\b')
else:
pw = pw + c
msvcrt.putch("*")
msvcrt.putch('\r')
msvcrt.putch('\n')
return pw
あなたはしかし、これを再考する場合があります。 Linuxの方が優れています。パスワードの文字数を知っているだけでも、それを解読したい人にとっては重要なヒントです。
You can use the getpass
module. getpass関数はプロンプトを除いてコンソールに何も出力しないので、これは正確には答えられません。この理由は、それがセキュリティの余分な層だからです。誰かがあなたの肩を見守っていると、パスワードの長さを知ることができません。
は、ここでそれを使用する方法の例です:「パスワードを入力してください:」
from getpass import getpass
getpass('Enter your password: ')
この例では、表示され、その後、あなたはあなたのパスワードを入力することができます。
'getpass'は元の質問で言及され、アスタリスクをエコーしないので拒否されました。 – kindall
kindallの答えは近いですが、バックスペースに問題があり、バックスペースは入力プロンプトを超えて戻ることができるだけでなく、アスタリスクも消去しません。
試してみてください。
def win_getpass(prompt='Password: ', stream=None):
"""Prompt for password with echo off, using Windows getch()."""
if sys.stdin is not sys.__stdin__:
return fallback_getpass(prompt, stream)
import msvcrt
for c in prompt:
msvcrt.putwch(c)
pw = ""
while 1:
c = msvcrt.getwch()
if c == '\r' or c == '\n':
break
if c == '\003':
raise KeyboardInterrupt
if c == '\b':
if pw == '':
pass
else:
pw = pw[:-1]
msvcrt.putwch('\b')
msvcrt.putwch(" ")
msvcrt.putwch('\b')
else:
pw = pw + c
msvcrt.putwch("*")
msvcrt.putwch('\r')
msvcrt.putwch('\n')
return pw
注mscvrt.putwchは、Python 2.xのでは動作しません、あなたが代わりにmscvrt.putchを使用する必要があります。
- 1. HTMLを使ってPython(Django)文字列から改行を読み取ってテキストを読む方法は?
- 2. pythonを使ってオンラインでファイルに書き込む方法は?
- 3. cssshを使ってCassandraにスキーマファイルを読み込む方法
- 4. JQueryから 'echo json_encode()'を読む正しい方法
- 5. lispを使ってpdfファイルを読む方法
- 6. ZendX_JQueryプラグインは、echo $ this-> jquery()でjQueryプラグインを読み込む方法です
- 7. ajaxとdjangoを使ってファイルを読み込む方法は?
- 8. Zend_Mail_Storage_Imapを使ってアクセントを読む方法
- 9. C#/ C++でOCRを使ってcalcを読み込む方法
- 10. PythonでQuickTimeヘッダーを読む方法
- 11. javaソケットを使ってimapを使ってgmailからメールを読む方法
- 12. pythonを使って次の行に書き込む方法は?
- 13. webserviceを呼び出し、python3を使ってXMLを読む方法は?
- 14. xlrdを使って数式を読む方法
- 15. nodejs/expressjsを使ってpdfファイルを読む方法
- 16. oledbを使ってハイフンの郵便番号を読む方法
- 17. spark-shellを使って.csvファイルを読む方法
- 18. nunitを使ってappconfig ldapを読む方法
- 19. pythonを使ってmboxフォルダからメールを読む
- 20. 逆に、Pythonを使ってIPアドレスを読む
- 21. Pythonを使って.nc(netcdf)ファイルを読む
- 22. pythonのマップを使って整数のシーケンスを読む
- 23. アプリエンジンndb - idを使ってキーでエンティティを読み込む方法は?
- 24. PyObjCを使ってWebKit WebViewでユーザーCSSを読み込む方法は?
- 25. MELを使ってミュールで特定のファイルを読む方法は?
- 26. はrssフィードを使ってブラウザ内のTwitterフィードを読む方法ですか?
- 27. PARSE方言を使ってCSVから行を読み込む方法は?
- 28. mod_pythonを使用しているときにpythonスクリプトでクッキーを読む方法
- 29. Pythonで配列値を使ってファイルに書き込む方法は?
- 30. フレックス(語彙スキャナー)を使ってUTF-8文字を読む方法は?
msvcrt.putch( '\ b')これは動作しないようです – wong2