0

我尝试在其中使用带有 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:~$

有人知道为什么并且可以帮助我解决这个问题吗?

4

1 回答 1

0

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

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

您应该将mypass()函数调用放在if name == " main "守卫内的 myModule 中 。

将 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函数。

于 2021-08-31T16:09:14.240 回答