if __name__ ==' __ main __'功能调用

时间:2017-02-02 20:55:52

标签: python

我正在努力解决我在一段需要构建的代码中遇到的问题。我有一个python模块,我需要能够导入并传递参数,然后由主模块解析。我得到的是这样的:

#main.py
if __name__ == '__main__' 
    sys.argv[] #pass arguments if given and whatnot
    Do stuff...

我需要的是添加一个main()函数,它可以接受参数并解析它们,然后像​​这样传递它们:

#main.py with def main()
def main(args):
    #parse args
    return args

if __name__ == '__main__':
    sys.argv[] #pass arguments if given and whatnot
    main(sys.argv)
    Do stuff...

总结一下:我需要导入main.py并传入由main()函数解析的参数,然后将返回的信息提供给if __name_ == '__main_'部分。

修改 澄清我在做什么

#hello_main.py 
import main.py

print(main.main("Hello, main"))

ALSO 我希望仍能通过

从shell调用main.py
$: python main.py "Hello, main"

因此保留名称 == 主要

我问的是甚至可能吗?我一直在花费今天研究这个问题的更好的部分,因为我想,如果可能的话,保留我给出的main.py模块。

谢谢,

DMG

2 个答案:

答案 0 :(得分:8)

在模块文件中,您可以编写#mymodule.py import sys def func(args): return 2*args #This only happens when mymodule.py is called directly: if __name__ == "__main__": double_args = func(sys.argv) print("In mymodule:",double_args) 以在直接调用该文件时获取特定行为,例如通过shell:

#test.py
import mymodule
print("In test:",mymodule.func("test "))

在导入到另一个文件时,仍然可以使用该功能:

python test.py

因此,调用"In test: test test "会产生python mymodule.py hello,而调用"In mymodule: hello hello "会产生#pragma once

答案 1 :(得分:0)

如果我理解你的问题你想要做这样的事情:

# In a file called test.py
import main
import sys

... code

if __name__ == "__main__":
    main.main(sys.argv)
    ... rest of your code