导入 class 也会导入 argparse 选项
Importing class imports argparse options as well
我有一个脚本 x_1.py,我在其中定义了一个 class Class_X。
我正在使用的另一个脚本是 x_2.py,其中我有以下行:
from x_1 import Class_X
脚本 x_1.py 和 x_2.py 都有不同的 argsparse 选项。当我调用 python x_1.py --h
时,我得到 x_1.py 的正确参数选项。当我调用 python x_2.py --h
时,我收到 x_1.py 的参数选项,而不是 x_2 的参数选项。
知道如何解决这个问题吗...?
很可能(除非你做的事情真的很奇怪),你想在 x_1.py
中添加一个守卫来保护那些不应该是 运行 的代码,如果脚本被导入的话.
def some_function():
pass
p = argparse.ArgumentParser()
p.add_argument(...)
if __name__ == "__main__":
args = p.parse_args()
# do some other stuff
现在,如果将 x_1
导入到另一个模块中,只会定义 some_function
和 p
; p.parse_args
不会被调用,p
本身只有在 x_2
决定使用它时才会被使用。如果 p
对其他模块不感兴趣,它的定义和配置也可以移到 if
语句中。
我有一个脚本 x_1.py,我在其中定义了一个 class Class_X。
我正在使用的另一个脚本是 x_2.py,其中我有以下行:
from x_1 import Class_X
脚本 x_1.py 和 x_2.py 都有不同的 argsparse 选项。当我调用 python x_1.py --h
时,我得到 x_1.py 的正确参数选项。当我调用 python x_2.py --h
时,我收到 x_1.py 的参数选项,而不是 x_2 的参数选项。
知道如何解决这个问题吗...?
很可能(除非你做的事情真的很奇怪),你想在 x_1.py
中添加一个守卫来保护那些不应该是 运行 的代码,如果脚本被导入的话.
def some_function():
pass
p = argparse.ArgumentParser()
p.add_argument(...)
if __name__ == "__main__":
args = p.parse_args()
# do some other stuff
现在,如果将 x_1
导入到另一个模块中,只会定义 some_function
和 p
; p.parse_args
不会被调用,p
本身只有在 x_2
决定使用它时才会被使用。如果 p
对其他模块不感兴趣,它的定义和配置也可以移到 if
语句中。