स्टड से पासवर्ड पढ़ें


180

परिदृश्य: एक इंटरैक्टिव सीएलआई पायथन प्रोग्राम, जो पासवर्ड की आवश्यकता है। इसका मतलब यह भी है, कोई GUI समाधान संभव नहीं है।

बैश में मैं एक पासवर्ड को बिना स्क्रीन पर री-प्रॉम्प्ट किए बिना पढ़ सकता था

read -s

क्या पायथन के लिए भी कुछ ऐसा ही है? अर्थात,

password = raw_input('Password: ', dont_print_statement_back_to_screen)

वैकल्पिक: टाइप किए गए वर्णों को स्क्रीन पर वापस भेजने से पहले '*' के साथ बदलें (उर्फ ब्राउज़र 'शैली)।

जवाबों:


280
>>> import getpass
>>> pw = getpass.getpass()

3
हाँ, वे बैटरी। ;-) पाइथन के साथ एक अच्छी बात यह है कि यह विशेष रूप से सी में अन्य भाषाओं में बायनेरिज़ के साथ आसानी से बाँधने की क्षमता है, इसलिए बहुत सारे मौजूदा सामान (जैसे गेटपास) का लाभ उठाते हुए, मेरा मानना ​​है कि
एमजेवी 19:09

2
इससे भी बेहतर, गेटपास () उस स्थिति से संबंधित है जिसमें एक सीएलआई उपकरण को एसटीडीआईएन के माध्यम से डेटा खिलाया जा रहा है और फिर भी आप पासवर्ड टाइप करने की क्षमता चाहते हैं। महान उपकरण!
तीयमन

2
@Tiemen, लेकिन मैं यहां ऐसा करने के लिए एक समाधान की तलाश में आया था क्योंकि गेटपास () अभी भी मुझे संकेत दे रहा है और पासवर्ड के लिए प्रतीक्षा कर रहा है, भले ही मैंने पासवर्ड को अपनी स्क्रिप्ट पर भेज दिया हो
माइकल

1
मेरे लिए, एक विंडो पॉप अप करें (न ही मैं क्या चाहता था, और न ही इसकी मदद ने क्या कहा) और जब मैंने इसे टाइप किया तो पासवर्ड को अस्पष्ट नहीं किया! पुन: पेश करने के लिए कोड: आयात गेटपास; getpass.getpass ()
माइकल ग्राज़ेब्रूक

1
लेकिन यह '*' को एक प्रकार के रूप में प्रदर्शित नहीं करता है। कोई इसे कैसे प्राप्त करता है?
जेसन

53

हां getpass: "बिना गूंज के पासवर्ड के लिए उपयोगकर्ता को प्रेरित करें।"

संपादित करें: मैंने स्वयं इस मॉड्यूल के साथ अभी तक नहीं खेला है, इसलिए यह वही है जो मैंने अभी पकाया है (आश्चर्य नहीं होगा यदि आप सभी जगह समान कोड पाते हैं, हालांकि):

import getpass

def login():
    user = input("Username [%s]: " % getpass.getuser())
    if not user:
        user = getpass.getuser()

    pprompt = lambda: (getpass.getpass(), getpass.getpass('Retype password: '))

    p1, p2 = pprompt()
    while p1 != p2:
        print('Passwords do not match. Try again')
        p1, p2 = pprompt()

    return user, p1

(यह पाइथन 3.x है; पाइथन 2.x का उपयोग raw_inputकरने के बजाय उपयोग करें input।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.