ここにはいくつかの問題がありますが、正しい軌道に乗っています。
これを試して:
import random
import getpass
password = "".join([chr(random.randint(33, 126)) for x in range(6)])
print("Your password is: {}".format(password))
pswd = getpass.getpass("Enter password: ")
if (pswd == password):
print("Access granted")
else:
print("Access denied")
まず、各文字の間にスペースが必要でない限り、"".join()"
代わりに, を使用する必要があります。" ".join()
次に、"".join()"
を定義するポイントでを使用する必要があります。password
これは、list
.
第 3 に、 の引数getpass.getpass()
は、パスワード自体ではなく、ユーザーにパスワードの入力を求めるプロンプトです。getpass()
パスワードが何であるかを知る必要はありません。ユーザーがパスワードを入力している間、入力エコーをユーザーから隠すのに役立ちます。
getpass.getpass([プロンプト[, ストリーム]])
エコーせずにユーザーにパスワードを要求します。ユーザーは文字列プロンプトを使用してプロンプトを表示されます。デフォルトは「Password:」です。Unix では、プロンプトはファイルのようなオブジェクト ストリームに書き込まれます。stream のデフォルトは制御端末 ( /dev/tty
) であるか、それが利用できない場合sys.stderr
(この引数は Windows では無視されます)。
編集
表示されている赤いエラーは、これが原因です (getpass()
上記のリンクのマニュアル ページから)。
エコーフリー入力が利用できない場合はgetpass()
、フォールバックして警告メッセージをストリームに出力し、から読み取ってsys.stdin
発行しGetPassWarning
ます。
これはおそらく Windows のみの問題であり、Linux / POSIX 環境では入力が隠されます。
Windows でこのエラーを修正するには、モジュールgetpass()
の使用を試みます。msvcrt
テストする Windows マシンはありませんがimport msvcrt
、Python プロンプトまたはスクリプトで実行してみて、動作するか失敗するかを確認し、表示されたエラーをコメントに投稿してください。msvcrt
インポートに失敗した場合、またはsys.stdin
期待どおりに機能していない場合にのみ、Windows でこのエラーが発生するようです。
また、@Jasper Bryant-Greeneが彼の回答で驚くほど提案したように、根本的な問題をmsvcrt
修正できない場合は、警告フィルターを使用して警告を非表示にすることができます。
import warnings
with warnings.catch_warnings():
warnings.simplefilter("ignore")
pswd = getpass.getpass("Enter password: ")