命令行选项的–m选项搜索给定的模块并将其作为__main__模块执行。Python标准模块中的runpy模块在内部支持此机制,该脚本允许使用Python模块命名空间而不是文件系统来定位脚本。
该模块定义了两个功能
该函数执行指定模块的代码,并返回生成的模块全局字典。
mod_name参数应为绝对模块名称。如果模块名称引用的是软件包而不是普通模块,则导入该软件包,然后执行该软件包中的__main__子模块,并返回结果模块全局字典。
在执行模块代码之前,会在全局字典中设置特殊的全局变量__name__,__spec__,__file__,__cached__,__loader__和__package__。
如果命名模块是软件包,则__name__设置为mod_name +'.__ main__',否则设置为mod_name参数。
__file__,__cached__,__loader__和__package__根据模块规范设置为正常。
此函数在给定路径下执行文件中的代码,并返回生成的模块全局字典。提供的路径可以引用Python源文件,编译的字节码文件或包含__main__模块的有效sys.path条目(例如,包含顶级__main__.py文件的zip文件)。
在执行模块代码之前,会在全局字典中设置特殊的全局变量__name__,__spec__,__file__,__cached__,__loader__和__package__。
如果此可选参数不为None,则将__name__设置为run_name,否则将其设置为'<run_path>'。
将以下脚本另存为runpyeample.py
#runpy example def add(x,y): return x+y def main(): x,y = 10,20 print (add(x,y)) return if __name__=='__main__': main()
执行以上示例的通常过程如下
>>> import runpyexample as rp >>> rp.main() 30 >>>
但是,我们现在使用runpy模块来执行它而不实际导入它。
>>> import runpy >>> runpy.run_module('runpyexample', run_name='__main__') 30
您也可以使用run_path()函数。
>>> runpy.run_path('runpyexample.py', run_name='__main__') 30
如前 ,runpy支持Python命令行的–m开关。
E:\python37>python -m runpyexample 30