在单独的模块中,Python getpass 在第二次尝试时工作

Posted

技术标签:

【中文标题】在单独的模块中,Python getpass 在第二次尝试时工作【英文标题】:Python getpass works at second attempt when in separate module 【发布时间】: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:~$

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

【问题讨论】:

【参考方案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 函数。

【讨论】:

哦,对了,我调用了两次函数,我错过了。非常感谢

以上是关于在单独的模块中,Python getpass 在第二次尝试时工作的主要内容,如果未能解决你的问题,请参考以下文章

python中getpass模块

python学习之getpass模块使用

一丶Python模块之getpass模块

python模块基础之getpass模块

python模块基础之getpass模块

python中getpass模块