Seite 1 von 1
Passwortabfrage Python
Verfasst: Mittwoch 15. Juni 2016, 19:51
von Poirot
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
Re: Passwortabfrage Python
Verfasst: Mittwoch 15. Juni 2016, 20:20
von BlackJack
@Poirot: Schau Dir mal das `getpass`-Modul an.
Re: Passwortabfrage Python
Verfasst: Mittwoch 15. Juni 2016, 21:02
von Poirot
BlackJack hat geschrieben:@Poirot: Schau Dir mal das `getpass`-Modul an.
Diese Funktion ist nützlich für passwörter ja aber ich weiß nicht wie ich damit die eingegebenen Zeichen durch * ersetzen kann.
Falls es denoch möglich ist wäre ein Beispiel sehr hilfreich.
LG Poirot
Re: Passwortabfrage Python
Verfasst: Donnerstag 16. Juni 2016, 01:31
von Citral
Poirot hat geschrieben:BlackJack hat geschrieben:@Poirot: Schau Dir mal das `getpass`-Modul an.
Diese Funktion ist nützlich für passwörter ja aber ich weiß nicht wie ich damit die eingegebenen Zeichen durch * ersetzen kann.
Falls es denoch möglich ist wäre ein Beispiel sehr hilfreich.
LG Poirot
Da es mich auch interessiert, habe ich mal bisschen gegoogelt.
Code: Alles auswählen
import getpass
p = getpass.getpass(prompt='Password:', stream=None)
print(p)
In pycharm bekomm ich nen Fehler zurück ist aber noch auszuführen, aber Passwort sichtbar.
GetPassWarning: Can not control echo on the terminal.
passwd = fallback_getpass(prompt, stream)
Warning: Password input may be echoed.
Password:
Per ubuntukonsole sehe ich wie Linuxtypisch kein Passwort. evt. werden in Windows Sternchen angezeigt.

Re: Passwortabfrage Python
Verfasst: Dienstag 21. Juni 2016, 12:53
von Poirot
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
Re: Passwortabfrage Python
Verfasst: Dienstag 21. Juni 2016, 19:47
von snafu
Hier wird beschrieben wie man Sterne bei der Passwortabfrage unter Windows anzeigen kann:
http://stackoverflow.com/a/16670956
Re: Passwortabfrage Python
Verfasst: Dienstag 21. Juni 2016, 20:29
von snafu
Variante, wie ich sie schreiben würde:
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)
Wobei hier der
asterisk-Parameter nur unter Windows beachtet wird.
Re: Passwortabfrage Python
Verfasst: Mittwoch 22. Juni 2016, 19:37
von Poirot
snafu hat geschrieben:Variante, wie ich sie schreiben würde:
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)
Wobei hier der
asterisk-Parameter nur unter Windows beachtet wird.
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 hoch
Wenn du es evt. erklären könntest wäre mir sehr weitergeholfen

Re: Passwortabfrage Python
Verfasst: Mittwoch 22. Juni 2016, 20:40
von BlackJack
@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.
Re: Passwortabfrage Python
Verfasst: Mittwoch 22. Juni 2016, 20:54
von DasIch
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

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.
Re: Passwortabfrage Python
Verfasst: Freitag 24. Juni 2016, 08:49
von Kebap
snafu hat geschrieben:Variante, wie ich sie schreiben würde
Wobei hier der asterisk-Parameter nur unter Windows beachtet wird.
Anscheinend ist auch das msvcrt Modul nur Windows/DOS only - beim Rest wird deine Variante normal getpass benutzen. Schön!
Wieso ist
asterisk default False?
Re: Passwortabfrage Python
Verfasst: Freitag 24. Juni 2016, 11:05
von snafu
Kebap hat geschrieben:Anscheinend ist auch das msvcrt Modul nur Windows/DOS only - beim Rest wird deine Variante normal getpass benutzen.
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:Wieso ist asterisk default False?
Ich wollte mit dem Standardverhalten nahe am Python-eigenen
getpass() sein.