Hallo,
ich habe folgendes Problem: Ich habe ein E-Mail Programm in Python geschrieben und einige meiner freunde möchten dieses Programm mitbenutzen. Um E-Mail's mit Python verschicken zu können muss man E-Mail und Passwort angeben. Nun möchte ich bei der Eingabe des Passworts anstelle des Passworts ***** ausgeben. Dies ist leider ein größeres Problem als ich dachte
Ich bin über jede Hilfe froh.
LG Poirot
Passwortabfrage Python
Diese Funktion ist nützlich für passwörter ja aber ich weiß nicht wie ich damit die eingegebenen Zeichen durch * ersetzen kann.BlackJack hat geschrieben:@Poirot: Schau Dir mal das `getpass`-Modul an.
Falls es denoch möglich ist wäre ein Beispiel sehr hilfreich.
LG Poirot
Da es mich auch interessiert, habe ich mal bisschen gegoogelt.Poirot hat geschrieben:Diese Funktion ist nützlich für passwörter ja aber ich weiß nicht wie ich damit die eingegebenen Zeichen durch * ersetzen kann.BlackJack hat geschrieben:@Poirot: Schau Dir mal das `getpass`-Modul an.
Falls es denoch möglich ist wäre ein Beispiel sehr hilfreich.
LG Poirot
Code: Alles auswählen
import getpass
p = getpass.getpass(prompt='Password:', stream=None)
print(p)
Per ubuntukonsole sehe ich wie Linuxtypisch kein Passwort. evt. werden in Windows Sternchen angezeigt.GetPassWarning: Can not control echo on the terminal.
passwd = fallback_getpass(prompt, stream)
Warning: Password input may be echoed.
Password:
Das ist ja schon mal ein guter Anfang @Citral. Wenn man das Programm bei Windows mit der Konsole und nicht mit IDLE ausführt wird auch anstelle der normalen Eingabe einfach nichts angegeben. Das kann allerdings verwirrend werden wenn man sich verschrieben hat und nicht weis wie viele Zeichen es sind.
War trotzdem eine große Hilfe
LG Poirot
War trotzdem eine große Hilfe
LG Poirot
Hier wird beschrieben wie man Sterne bei der Passwortabfrage unter Windows anzeigen kann:
http://stackoverflow.com/a/16670956
http://stackoverflow.com/a/16670956
Variante, wie ich sie schreiben würde:
Wobei hier der asterisk-Parameter nur unter Windows beachtet wird.
Code: Alles auswählen
import getpass
import sys
try:
import msvcrt
except ImportError:
msvcrt = None
def get_password(prompt='Password: ', stream=sys.stderr, asterisk=False):
if not asterisk or not msvcrt:
return getpass.getpass(prompt, stream)
stream.write(prompt)
stream.flush()
password = []
while True:
character = msvcrt.getwch()
if character == '\003':
raise KeyboardInterrupt
elif character in ('\r', '\n'):
stream.write('\r\n')
break
elif character == '\b' and password:
password.pop()
stream.write('\b \b')
else:
password.append(character)
stream.write('*')
stream.flush()
return ''.join(password)
Ich muss ganz ehrlich sagen das ich aus diesem Code nicht schlau werde :K. Bin noch Programmier Anfänger bzw behersche die Grundkenntnisse das hier ist mir leider viel zu hochsnafu hat geschrieben:Variante, wie ich sie schreiben würde:Wobei hier der asterisk-Parameter nur unter Windows beachtet wird.Code: Alles auswählen
import getpass import sys try: import msvcrt except ImportError: msvcrt = None def get_password(prompt='Password: ', stream=sys.stderr, asterisk=False): if not asterisk or not msvcrt: return getpass.getpass(prompt, stream) stream.write(prompt) stream.flush() password = [] while True: character = msvcrt.getwch() if character == '\003': raise KeyboardInterrupt elif character in ('\r', '\n'): stream.write('\r\n') break elif character == '\b' and password: password.pop() stream.write('\b \b') else: password.append(character) stream.write('*') stream.flush() return ''.join(password)
Wenn du es evt. erklären könntest wäre mir sehr weitergeholfen
@Poirot: Wo liegt denn das Problem beim Verständnis? Da wird nichts wirklich exotisches verwendet, und was verwendet wird sollte man alles nachlesen können, wenn man es nicht versteht.
Du magst den Code nicht verstehen aber mit deinen Grundkenntnissen dürftest es nicht schon an der ersten Zeile scheitern. Geh Zeile für Zeile den Code durch und sobald du auf eine stößt die du nicht verstehst, frag was da passiert. Darauf kann man dann auch sinnvoll und effizient antworten.Poirot hat geschrieben:Ich muss ganz ehrlich sagen das ich aus diesem Code nicht schlau werde :K. Bin noch Programmier Anfänger bzw beherrsche die Grundkenntnisse das hier ist mir leider viel zu hoch
Anscheinend ist auch das msvcrt Modul nur Windows/DOS only - beim Rest wird deine Variante normal getpass benutzen. Schön!snafu hat geschrieben:Variante, wie ich sie schreiben würde
Wobei hier der asterisk-Parameter nur unter Windows beachtet wird.
Wieso ist asterisk default False?
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Richtig, es handelt sich dabei um eine reine Windows-Schnittstelle. Daher ist ja auch die Sonderbehandlung nötig, denn der Code für Unix-Terminals funktioniert unter Windows nicht.Kebap hat geschrieben:Anscheinend ist auch das msvcrt Modul nur Windows/DOS only - beim Rest wird deine Variante normal getpass benutzen.
Ich wollte mit dem Standardverhalten nahe am Python-eigenen getpass() sein.Kebap hat geschrieben:Wieso ist asterisk default False?