Python getpass置于独立模块调用时需第二次输入才生效问题求助
问题产生原因
- Python导入模块的默认机制会执行模块文件内所有不在函数/类中的顶层代码。你编写的独立模块末尾直接调用了
mypass(),没有添加入口判断,因此主脚本执行import myModule时会自动触发一次mypass()调用,这是第一次Password:提示的来源。 - 主脚本内显式调用
myModule.mypass()是第二次Password:提示的来源,因此需要输入两次才会拿到有效密码。 - 直接运行独立模块时仅会执行一次
mypass(),因此表现符合预期。
修复方案
修改独立模块的代码,仅在直接运行该模块时才调用mypass(),导入时不执行顶层调用:
#! /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()的代码,增加入口判断 if __name__ == '__main__': mypass()
修改完成后重新运行主脚本,仅会触发一次密码输入提示,问题即可解决。
内容的提问来源于stack exchange,提问作者mxFrank
相关产品推荐
相关产品推荐

