1

私のプログラムは、ユーザー入力がそれに一致する必要があるように、変数に割り当てられた特定の事前定義されたパスワードを記憶する必要があります。

import random

password = [chr(random.randint(33, 126)) for x in range(6)]

print("Your password is: {}".format(" ".join(password)))

import getpass

pswd = getpass.getpass(password)

if (pswd == password):
   print("Access granted")
else:
   print("Access denied")

コードでパスワードを受け取り、それを入力する必要があります。無関係なコーディングの大部分を削除したので、主なことは、ユーザーがパスワードを取得し、後でそれを入力する必要があることです。したがって、パスワードはランダムな文字のセットであり、ユーザーが覚えて必要なときに入力する必要があるパスワードです。

それは機能していません。誰かが助けてくれるかどうか疑問に思っていました。

GetPassWarningまた、輸入によりシェルに出る赤い文字( )を消す方法はありgetpass.getpass()ますか?

ありがとう。

4

3 に答える 3

2

password参加後に取得した文字列に設定して、ユーザーが入力した文字列と比較できるようにします。

import random

password = " ".join([chr(random.randint(33, 126)) for x in range(6)])

print("Your password is: {}".format(password)

import getpass

pswd = getpass.getpass("Enter your password: ")

if (pswd == password):
   print("Access granted")
else:
   print("Access denied")
于 2016-01-02T19:40:15.170 に答える
1

それ以外の:

password = [chr(random.randint(33, 126)) for x in range(6)]
print("Your password is: {}".format(" ".join(password))

… 使用する:

password = "".join(chr(random.randint(33, 126)) for x in range(6))
print("Your password is: {}".format(password))

それpasswordstrではなく ですlist

パスワード プロンプトの一部としてパスワードが再び出力されるのを防ぎ、GetPassWarning(別の投稿で述べたように、モジュールに関連している可能性がある問題を修正できない場合にのみ抑制が必要です) を抑制するには、次のようにmsvcrt変更できます。

pswd = getpass.getpass(password)

… に:

import warnings

with warnings.catch_warnings():
    warnings.simplefilter("ignore")
    pswd = getpass.getpass("Enter password:")

password(最初の引数として に渡すことgetpass.getpassで、現在、パスワード自体をパスワード プロンプトとして使用するように指示しています。)

于 2016-01-02T19:42:04.533 に答える
0

ここにはいくつかの問題がありますが、正しい軌道に乗っています。

これを試して:

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: ")
于 2016-01-02T19:42:01.513 に答える