【问题标题】:Python getpass works at second attempt when in separate module在单独的模块中,Python getpass 在第二次尝试时工作
【发布时间】:2021-10-30 05:00:18
【问题描述】:

我尝试使用带有 getpass() 函数的单独模块,例如

#! /usr/bin/python3
from getpass import getpass
import sys
def mypass():
    try:
        password = getpass('Password: ')
    except Exception as e:
        print(e)
        sys.exit(1)
    while password == '':
        password = getpass('Enter password again: ')
    return(password)
mypass()

我有一个使用这个模块的主脚本:

#! /usr/bin/python3
import myModule
...
def main():
    p = myModule.mypass()
    print(p) #for testing only
...
if __name__ == '__main__':
    main()

当我直接运行 myModule 脚本时,密码输入在第一次尝试时有效,当我使用主脚本时,密码输入在第二次尝试时有效:

user@server:~$./myModule.py
Password:
user@server:~$
user@server:~$./main.py
Password:
Password:
secret
user@server:~$

有人知道原因并能帮我解决这个问题吗?

【问题讨论】:

    标签: python-3.x function module getpass


    【解决方案1】:

    问题是您总是在 myModule 中调用 mypass 函数。当您从主模块导入它时也会发生这种情况。

    这就是为什么在运行 main.py 文件时第一次看不到终端打印的密码。

    你应该把 mypass() 函数调用放在 myModule 里面 if name == "ma​​in" 守卫。

    将 myModule 中的代码更改为以下内容:

    from getpass import getpass
    import sys
    
    def mypass():
        try:
            password = getpass('Password: ')
        except Exception as e:
            print(e)
            sys.exit(1)
        while password == '':
            password = getpass('Enter password again: ')
        return password
    
    if __name__ == '__main__':
        password = mypass()
        print(password)
    
    

    现在在导入 myModule 时不会调用 mypass 函数。

    【讨论】:

    • 哦,对了,我调用了两次函数,我错过了。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    相关资源
    最近更新 更多