     <link rel="alternate" type="application/atom+xml" title="sebthom.de Category: Jython" href="https://sebthom.de/de/category/it/development/jython/feed/" />
{"id":70,"date":"2008-11-21T01:02:15","date_gmt":"2008-11-21T00:02:15","guid":{"rendered":"http:\/\/sebthom.de\/?p=70"},"modified":"2022-12-25T20:57:11","modified_gmt":"2022-12-25T19:57:11","slug":"getpass-jython","status":"publish","type":"post","link":"https:\/\/sebthom.de\/de\/70-getpass-jython\/","title":{"rendered":"getpass f&uuml;r Jython"},"content":{"rendered":"<p>In meinem aktuellen Projekt entwickle ich u.a. verschiedene Jython basierte Kommandozeilenanwendungen. Einige davon erwarten die Eingabe von maskierten Passw&ouml;rtern. Python stellt hierf&uuml;r das <a href=\"http:\/\/www.python.org\/doc\/lib\/module-getpass.html\">getpass<\/a> Modul bereit. Leider ist bisher keine entsprechende Implementierung f&uuml;r Jython verf&uuml;gbar.<\/p>\n<p>Im folgenden ein passendes Modul, welches diese Funktionalit&auml;t bereitstellt. Es verwendet einen Mechanismus um die Passworteingabe in der Kommandozeile zu maskieren, welcher hier beschrieben wurde <a href=\"http:\/\/java.sun.com\/developer\/technicalArticles\/Security\/pwordmask\/\">http:\/\/java.sun.com\/developer\/technicalArticles\/Security\/pwordmask\/<\/a>. Sollte Jython in Verbindung mit Java 6 oder h&ouml;her eingesetzt werden, so nutzt dieses Modul stattdessen die neue <a href=\"http:\/\/java.sun.com\/javase\/6\/docs\/api\/java\/io\/Console.html#readPassword%28%29\">Console.readPassword()<\/a> Methode. Sollte das Modul in einer Umgebung laufen in welcher eine getpass Modulimplementierung verf&uuml;gbar ist, dann wird stattdessen an die entsprechende Methode im getpass Modul delegiert.<\/p>\n<pre class=\"python\" name=\"code\"># ext_getpass.py\r\n# @author Sebastian Thomschke, http:\/\/sebthom.de\/\r\nimport thread, sys, time, os\r\n\r\n# exposed methods:\r\n__all__ = [\"getpass\",\"getuser\"]\r\n\r\ndef __doMasking(stream):\r\n    __doMasking.stop = 0\r\n    while not __doMasking.stop:\r\n        stream.write(\"b*\")\r\n        stream.flush()\r\n        time.sleep(0.01)\r\n\r\ndef generic_getpass(prompt=\"Password: \", stream=None):\r\n    if not stream:\r\n        stream = sys.stderr\r\n    prompt = str(prompt)\r\n    if prompt:\r\n        stream.write(prompt)\r\n        stream.flush()\r\n    thread.start_new_thread(__doMasking, (stream,))\r\n    password = raw_input()\r\n    __doMasking.stop = 1\r\n    return password\r\n\r\ndef generic_getuser():\r\n    for name in ('LOGNAME', 'USER', 'LNAME', 'USERNAME'):\r\n        usr = os.environ.get(name)\r\n        if usr: return usr\r\n\r\ndef java6_getpass(prompt=\"Password: \", stream=None):\r\n    if not stream:\r\n        stream = sys.stderr\r\n    prompt = str(prompt)\r\n    if prompt:\r\n        stream.write(prompt)\r\n        stream.flush()\r\n\r\n    from java.lang import System\r\n    console = System.console()\r\n    if console == None:\r\n\t    return generic_getpass(prompt, stream)\r\n    else:\r\n        return \"\".join(console.readPassword())\r\n\r\ntry:\r\n    # trying to use Python's getpass implementation\r\n    import getpass\r\n    getpass = getpass.getpass\r\n    getuser = getpass.getuser\r\nexcept:\r\n    getuser = generic_getuser\r\n\t\r\n    # trying to use Java 6's Console.readPassword() implementation\r\n    try:\r\n        from java.io import Console\r\n        getpass = java6_getpass\r\n    except ImportError, e:\r\n        # use the generic getpass implementation\r\n        getpass = generic_getpass\r\n<\/pre>\n<p>Here is an usage example:<\/p>\n<pre class=\"python\" name=\"code\">\r\nimport ext_getpass as getpass\r\n\r\npw = getpass.getpass(\"Please enter your password:\")\r\nprint \"The entered password was: \" + pw\r\n<\/pre>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>In meinem aktuellen Projekt entwickle ich u.a. verschiedene Jython basierte Kommandozeilenanwendungen. Einige davon erwarten die Eingabe von maskierten Passw&ouml;rtern. Python stellt hierf&uuml;r das getpass Modul bereit. Leider ist bisher keine entsprechende Implementierung f&uuml;r Jython verf&uuml;gbar. Im folgenden ein passendes Modul, welches diese Funktionalit&auml;t bereitstellt. Es verwendet einen Mechanismus um die Passworteingabe in der Kommandozeile zu&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[63],"tags":[30,105,66,65],"class_list":["post-70","post","type-post","status-publish","format-standard","hentry","category-jython","tag-java","tag-jython","tag-password","tag-python"],"_links":{"self":[{"href":"https:\/\/sebthom.de\/de\/wp-json\/wp\/v2\/posts\/70","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sebthom.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sebthom.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sebthom.de\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sebthom.de\/de\/wp-json\/wp\/v2\/comments?post=70"}],"version-history":[{"count":0,"href":"https:\/\/sebthom.de\/de\/wp-json\/wp\/v2\/posts\/70\/revisions"}],"wp:attachment":[{"href":"https:\/\/sebthom.de\/de\/wp-json\/wp\/v2\/media?parent=70"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sebthom.de\/de\/wp-json\/wp\/v2\/categories?post=70"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sebthom.de\/de\/wp-json\/wp\/v2\/tags?post=70"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}