2015-04-29 5 views
6

Ich muss Passwort ausblenden, wenn Benutzer Skript in der Konsole (wie folgt: mysql -p). Für Eingabe Parameter verwende ich argparse, wie kann ich hinzufügen getpass Passwort param?Wie Passwort in Python verstecken

parser = argparse.ArgumentParser() 
parser.add_argument('-p', action='store', dest='password', type=getpass.getpass()) 

Wenn ich mein Skript ausführen: python script.py -u User -p ich separate Leitung bekommen für Passwort eingeben (Password:), aber nach der Eingabe raise Ausnahme: ValueError: 'my_password' is not callable

+2

Bitte posten Sie [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) – Alik

+1

es ist üblich, einen Aufruf an "getpass" zu machen, nachdem 'argparse' parsing abgeschlossen ist, so dass es nach getan ist cmd Zeilenargumente wurden verifiziert. – tdelaney

Antwort

5

Dieser Kerl Ihr Problem lösen sollte: getpass

Hier ein Beispiel mit einer benutzerdefinierten Aktion

class PwdAction(argparse.Action): 

    def __call__(self, parser, namespace, values, option_string=None): 
     mypass = getpass.getpass() 
     setattr(namespace, self.dest, mypass) 

parser = argparse.ArgumentParser() 
parser.add_argument('-f', action=PwdAction, nargs=0) 
+0

Ich benutze es (type = getpass.getpass()), aber ich muss es zusammen mit argparse verwenden – oxana

+0

Pflege zu erarbeiten? OP benutzt bereits getpass. Ein Link zu den Dokumenten könnte nützlich sein, aber es ist nicht wirklich eine Antwort. – Holloway

+2

Sorry, nicht sehen. Dann würde ich eine benutzerdefinierte Aktion erstellen, die den Benutzer mit getpass dorthin drängt, lassen Sie mich die Antwort in einem Moment bearbeiten! – qwattash

3

EDIT: Meine vor Die Antwort war falsch und basiert auf einer Vermutung. Dies war mein Versuch einer funktionierenden Lösung. @qwattash hat die Antwort zuerst richtig gepostet, aber da ich zehn Minuten damit verbracht habe, es auszuarbeiten, dachte ich, ich würde meine Antwort korrigieren.

+0

Ich habe versucht, aber in diesem Fall nehme ich Fehler: error: argument -p: erwartet ein Argument. In meiner Lösung kann ich zumindest Skript ausführen und Zeile für Eingabe verstecktes Passwort nehmen. – oxana

+0

@no_test, siehe aktualisierte Antwort (und qwattash's). – Holloway

+0

Dies sollte die richtige Antwort sein. – Blairg23

-1

Kurze Antwort: Nein, Sie können nicht!

argparse Modul ist nicht beabsichtigt, es zu tun. Sie sollten nach dem Passwort für andere getrennte Prozesse fragen. Das Argument type ist nur ein Wertkonverter, der verwendet wird, bevor der Wert gespeichert wird.

Verwandte Themen