Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
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
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.
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
@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.
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.
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.