首页 > 解决方案 > 替代 if __name__ == '__main__':

问题描述

我有一个main.py名为的模块gui.py,我想将其编译为 cython,然后是 exe,其中包括:

import gui

if __name__ == '__main__':
    gui()

然后在gui.py我有一个使用if __name__ == '__main__':如下的代码:

def find_regex_1(k, s):
    reg = f'{k}\s*=\s*(\S+)'
    return re.search(reg, s).group(1)

def read_configs(config_file):
    with open(config_file, "r") as f:
        content = f.read()
        license_code = find_regex_1('LICENSE CODE', content)
        activation_code = find_regex_1('ACTIVATION CODE ', content)
    return license_code, activation_code

if __name__ == '__main__':
    license_code, activation_code = read_configs('config.txt')

if __name__ == '__main__':中断过程中的第二个gui.py我应该怎么做才能避免这种情况?我想我应该使用别的东西而不是if __name__ == '__main__':但我不知道用什么来代替相同的效果

我得到的错误:

C:\Users\Administrator\Desktop\cython>python main.py
Traceback (most recent call last):
  File "C:\Users\Administrator\Desktop\cython\main.py", line 24, in <module>
    import gui
  File "gui.py", line 530, in init gui
    status, msg = activate_license(sys.argv[0])
  File "gui.py", line 113, in gui.activate_license
    "key": license_code,
NameError: name 'license_code' is not defined

当我运行模块gui.py本身时,它将毫无问题地运行,但main.py我会收到此错误

标签: pythonselenium

解决方案


导入模块gui.py时可以在程序中调用它的函数main.py,如下:

import gui


if __name__ == '__main__':
    license_code, activation_code = gui.read_configs('config.txt')

完全没有问题该模块gui.py还包含一个if __name__ == '__main__':


推荐阅读