一 前言
安装完python后,通过python关键字我们就可以执行python文件
如下
python xxx.py
上面是很常见的在命令行执行py的方式,但其实python关键字后面还可以加上许多可选选项如
python -c xxxxx
python -m xxxxx
二 python关键字后的可选选项
python [-bBdEhiIOqsSuvVWx?] [-c command | -m module-name | script | - ] [args]
-c
执行 -c后面 command 中的 Python 代码,如
执行该选项时,会把执行python命名时所处的目录加到sys.path的开头,上面的话就是路径D:
sys.argv 的首个元素为 "-c"
-m
-m 后面可以跟模块名也可以跟包名,该选项会把执行python命名时所处的目录加到sys.path的开头
sys.argv 的首个元素将为模块文件的完整路径
如
参数是模块名时,模块名不要包含文件后缀.py,python在 sys.path 中搜索指定模块,并作为__main__模块来执行其中的内容,如下
执行
如上,后面是模块名时,和不用-m加上后缀的效果是一样的,用 -m加上后缀虽然也能执行但是给出了警告
还可以看到,虽然我们有自己的模块名,但python把我们的模块作为__main__模块执行,所以我们经常会看见 if name == "main"的形式
参数是包名时,python会把包里面的__main__模块 作为主模块执行,如下
MyPkg包里面有3个模块
执行
如上,init.py和__main__.py都被执行了
一些标准模块或者第三方模块也支持用-m选项来执行如
python -m pip install xxxx
python -m pytest -s -v test_xx.py
其实上面不用前面的python -m 也是可以的如
pip install xxxx
pytest -s -v test_xx.py
不同的是,加上python -m后会,python会把执行命令时所处的目录加入到sys.path中
另外,像鄙人的电脑安装了多个版本的python而没有使用相关的多版本管理工具时 使用python -m 可以执行用哪一个python版本来运行命令
如,电脑上还安装了一个python3.8的版本,设置环境变量后,我把python.exe的的名字作了更改,因为执行python xxx时,这里python其实对应的就是python.exe,有多个版本的python时,就会有多个python.exe,所以要不他们区分开来,如下
现在我可以用python3.8版本来执行python
这里我的3.8版本没有安装代码里面需要的日志库loguru
在3.8版本安装一下后再执行
如果我这里用python -m xxxxx,我这里指的就是用另一个版本的python来执行了
script
script可以是py文件、包含 main.py 文件的目录、包含 main.py 文件的 zip 文件,他们应该是绝对的或相对的文件路径
如常见的 python xxx.py
如果是Python 文件,则把该文件所在目录加入 sys.path 的开头,并且把该文件当作 main 模块来执行。
如果是向目录或 zip 文件,则把脚本名加入 sys.path 的开头,并把该位置中的 main.py 文件当作 main 模块来执行
此选项,sys.argv 的第一个元素就是在命令行中指定的脚本名称
执行
args
args就是我们放在命令后面的向代码文件输入的自定义参数,如
执行