2024-04-26 07:22:16 发布
网友
这要看情况。如果主代码受if保护,如下所示:
if
if __name__ == '__main__': ...main code...
然后不,您不能让Python执行它,因为您不能影响自动变量__name__。
__name__
但是当所有的代码都在一个函数中时,就可以了。试试看
import myModule myModule.main()
即使当模块使用__all__保护自己时,这也可以工作。
__all__
from myModule import *可能无法使main对您可见,因此您确实需要导入模块本身。
from myModule import *
main
马蒂金的回答是有道理的,但它遗漏了一些重要的东西,其他人可能会觉得很明显,但我很难搞清楚。
在使用argparse的版本中,需要在主体中包含这一行。
args = parser.parse_args(args)
通常,当您在脚本中使用argparse时,您只需编写
args = parser.parse_args()
parse_args从命令行查找参数。但在这种情况下,main函数不能访问命令行参数,因此必须告诉argparse参数是什么。
下面是一个例子
import argparse import sys def x(x_center, y_center): print "X center:", x_center print "Y center:", y_center def main(args): parser = argparse.ArgumentParser(description="Do something.") parser.add_argument("-x", "--xcenter", type=float, default= 2, required=False) parser.add_argument("-y", "--ycenter", type=float, default= 4, required=False) args = parser.parse_args(args) x(args.xcenter, args.ycenter) if __name__ == '__main__': main(sys.argv[1:])
假设您将此命名为mytest.py 要运行它,您可以从命令行执行这些操作
python ./mytest.py -x 8 python ./mytest.py -x 8 -y 2 python ./mytest.py
分别返回
X center: 8.0 Y center: 4
或者
X center: 8.0 Y center: 2.0
X center: 2 Y center: 4
或者如果你想从另一个python脚本运行,你可以
import mytest mytest.main(["-x","7","-y","6"])
又回来了
X center: 7.0 Y center: 6.0
只是一个功能。导入并调用它:
如果需要分析参数,有两个选项:
在main()中解析它们,但作为参数传入sys.argv(下面的所有代码都在同一个模块中myModule):
main()
sys.argv
myModule
def main(args): # parse arguments using optparse or argparse or what have you if __name__ == '__main__': import sys main(sys.argv[1:])
现在您可以从其他模块导入并调用myModule.main(['arg1', 'arg2', 'arg3'])。
myModule.main(['arg1', 'arg2', 'arg3'])
让main()接受已分析的参数(同样是myModule模块中的所有代码):
def main(foo, bar, baz='spam'): # run with already parsed arguments if __name__ == '__main__': import sys # parse sys.argv[1:] using optparse or argparse or what have you main(foovalue, barvalue, **dictofoptions)
导入并调用myModule.main(foovalue, barvalue, baz='ham')其他地方,并根据需要传入python参数。
myModule.main(foovalue, barvalue, baz='ham')
这里的技巧是检测何时将模块用作脚本;何时将python文件作为主脚本运行(python filename.py)时不使用import语句,因此python调用该模块"__main__"。但是,如果相同的filename.py代码被视为一个模块(import filename),那么python将其用作模块名。在这两种情况下,变量__name__都是设置的,并且对其进行测试可以告诉您代码是如何运行的。
python filename.py
import
"__main__"
filename.py
import filename
这要看情况。如果主代码受
if
保护,如下所示:然后不,您不能让Python执行它,因为您不能影响自动变量
__name__
。但是当所有的代码都在一个函数中时,就可以了。试试看
即使当模块使用
__all__
保护自己时,这也可以工作。from myModule import *
可能无法使main
对您可见,因此您确实需要导入模块本身。马蒂金的回答是有道理的,但它遗漏了一些重要的东西,其他人可能会觉得很明显,但我很难搞清楚。
在使用argparse的版本中,需要在主体中包含这一行。
通常,当您在脚本中使用argparse时,您只需编写
parse_args从命令行查找参数。但在这种情况下,main函数不能访问命令行参数,因此必须告诉argparse参数是什么。
下面是一个例子
假设您将此命名为mytest.py 要运行它,您可以从命令行执行这些操作
分别返回
或者
或者
或者如果你想从另一个python脚本运行,你可以
又回来了
只是一个功能。导入并调用它:
如果需要分析参数,有两个选项:
在
main()
中解析它们,但作为参数传入sys.argv
(下面的所有代码都在同一个模块中myModule
):现在您可以从其他模块导入并调用
myModule.main(['arg1', 'arg2', 'arg3'])
。让
main()
接受已分析的参数(同样是myModule
模块中的所有代码):导入并调用
myModule.main(foovalue, barvalue, baz='ham')
其他地方,并根据需要传入python参数。这里的技巧是检测何时将模块用作脚本;何时将python文件作为主脚本运行(
python filename.py
)时不使用import
语句,因此python调用该模块"__main__"
。但是,如果相同的filename.py
代码被视为一个模块(import filename
),那么python将其用作模块名。在这两种情况下,变量__name__
都是设置的,并且对其进行测试可以告诉您代码是如何运行的。相关问题 更多 >
编程相关推荐