在单独的模块中,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 == "main" 守卫。
将 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 在第二次尝试时工作的主要内容,如果未能解决你的问题,请参考以下文章