我想你最常用到的 Python 命令就是运行 Python 脚本文件,像这样:
python xxx.py
不过你知道为什么这样就可以直接执行 Python 代码么?
还有, Python 还有一些常用的命令可玩,你试过吗?
![dec69a71591f0daa4d678cdb927ff1ec.png](https://i-blog.csdnimg.cn/blog_migrate/24753c9cb65007940a5f8c4cbe03172d.jpeg)
接下来,就是学习 Python 的正确姿势:
![38fc79fe66b6aab5460d9e74f8595ebb.png](https://i-blog.csdnimg.cn/blog_migrate/b0d518c8591e09f9115c49378e319d56.jpeg)
我们来说说那些我们常用到的 Python 命令。
python xxx.py
当你通过 Python 执行脚本文件的时候,sys.argv[0] 会存储这个 py 文件名称:
![b4b4db6a918b7676519bd5179f32c57a.png](https://i-blog.csdnimg.cn/blog_migrate/2ea70174dea6b10a86fa1b7364c8ec1d.jpeg)
![2b4b145367ace9fbf44ddb51c7e32f1c.png](https://i-blog.csdnimg.cn/blog_migrate/2977d9f32cf42bf2b85598b39c53942b.jpeg)
而当你在 python xxx.py 后面再添加一些参数的时候,sys.argv 也同样可以接收到相关的参数:
![634912b32cad1ab4e5cd837dfdcb608d.png](https://i-blog.csdnimg.cn/blog_migrate/2e5997a1a168557b043c461fe7fea287.jpeg)
![362c96bf954fb0bd86a62ef32ad06b71.png](https://i-blog.csdnimg.cn/blog_migrate/004a8f90e80792cef8532749e90e7bbb.jpeg)
而且,它会把你的执行的 py 文件路径添加到 sys.path 中来,将它作为主模块来运行:
![b38ae881e2fa53d87e083605726edf29.png](https://i-blog.csdnimg.cn/blog_migrate/78d398b65f32b3d0c52e80865a6c33cb.jpeg)
除了直接使用 python 执行脚本文件之外,你也可以使用 Python 执行整个 Python 项目目录或者压缩文件,不过在这里面你需要定义一个 __main__.py ,要不然解释器无法识别运行:
![e10c9145a80396d07f206c477045425d.png](https://i-blog.csdnimg.cn/blog_migrate/3f0d16e8f7bf02e366558c2bb3cac889.jpeg)
而当你的目录中有定义 __main__.py 的时候,它就可以将 main 添加到 sys.path 中来,作为 main 模块执行:
![b0c2436f9e1a9de05fd3b501c54d1c9e.png](https://i-blog.csdnimg.cn/blog_migrate/b1c1f35fa5b78a0458bdfa7908dc45bf.jpeg)
除此之外,你还可以直接使用脚本的文件执行 Python 代码,在你的脚本文件的第一行定义 Python 环境:
![158766e38db43f5664a33f48d28fbdc2.png](https://i-blog.csdnimg.cn/blog_migrate/bd5bfd269943918ab2ffa76adf96bf0c.jpeg)
接着添加脚本文件的执行权限,然后就可以直接用脚本文件名称直接运行 Python 了:
![3bb680e92212177b8488af2ceee711c4.png](https://i-blog.csdnimg.cn/blog_migrate/c73655a40bd797216bfe3635807c9b4d.jpeg)
python -c
使用 python -c 可以让你在命令行中写 Python 代码执行,可以使用 ; 进行代码分行:
![1a70da827867841eba0d8f203ae15995.png](https://i-blog.csdnimg.cn/blog_migrate/57195cd89f131e53f6353afcb9ef4517.jpeg)
一种更好的方式是使用空行对代码进行分行:
![364fd0cca843e713ec9a635dbb9d068b.png](https://i-blog.csdnimg.cn/blog_migrate/7b6a863800018424804774fc724a4525.jpeg)
当你在 python 解释器中使用 -c 命令的时候,它会将 -c 添加到 sys.argv[0] 中,将当前的路径添加到 sys.path 中:
![4618e215ad24e540224f410ce2f3d79b.png](https://i-blog.csdnimg.cn/blog_migrate/8c641ffb425b70cb196836d96d55a31b.jpeg)
python -m
使用 -m 模块可以以脚本的方式执行 Python 的模块或者包,因为执行的是模块,所以就不用像执行脚本文件那样把 .py 扩展名称写出来。
![0845d27bbbf9f19ee7ced46cb3ab5fa8.png](https://i-blog.csdnimg.cn/blog_migrate/d4a25b1ae836944cc9b64cf7c21a9869.jpeg)
![fe04cee08c5e279cfe603dc0fefc04d0.png](https://i-blog.csdnimg.cn/blog_migrate/242ba60a009c6c63f7847f2b12fa2c2b.jpeg)
可以看到,模块的完全路径会添加到 sys.argv[0],将当前的路径添加到 sys.path 中,将模块名作为 main 执行。
你能体会到 python xxx.py 和 python -m xxx 之间的区别么?
当然,你也可以使用 -m 来执行包中的模块:
![45324a32c13620a4bb5caffaffa45ec6.png](https://i-blog.csdnimg.cn/blog_migrate/d94ce4213f0520305b1a1426755466d3.jpeg)
通过 -m 的形式,解释器会通过搜索路径找到相应的模块执行,这样你就不需要想执行 .py 那样写入文件的绝对路径啦。
使用 python -m 的一个常用场景是在不同的版本环境中执行相应的模块,比如使用 pip 安装模块的时候:
![7618e37629f1b00438aa8f4ca0d88bd3.png](https://i-blog.csdnimg.cn/blog_migrate/7aba2f4f7569808fc8967045731c7bd3.jpeg)
![b6e81ce228b4109a56651fe0cc3ced8b.png](https://i-blog.csdnimg.cn/blog_migrate/e896ebdcad63f10f41083e1f550f99a0.jpeg)
![67a21620888641be891bcb277fb99f61.png](https://i-blog.csdnimg.cn/blog_migrate/557394f08b0bf45eb1345a4a0726e9cd.jpeg)
python -i
当你使用 -c 命令的时候,还想执行完相关代码后进入 Python 交互模式就可以使用 -i :
![6b0c95eb97e840795ba255b6b48f9cdf.png](https://i-blog.csdnimg.cn/blog_migrate/c2a930ef3e79f3ac9ff1c198ecf53ead.jpeg)
还有其它的命令,你可以通过 python -h 找到相关的解释:
![b841f94959f3cd5e7fa1601949aea687.png](https://i-blog.csdnimg.cn/blog_migrate/099d3bc5c9f97a0652a04e6a3b4ecad1.jpeg)
可能有时候你也想要提供一些命令给别人使用,Python 内置了一个 argparse 的库,你可以使用它来创建你要提供的命令,比如这样:
![1ffef9afa73ab83793f2a53504e8057c.png](https://i-blog.csdnimg.cn/blog_migrate/c72c21a3b19468b68e93462f4d27887c.jpeg)
执行的时候就可以使用相关的命令了:
![7db79cedc9cd45760cea1c0dcb9ec6d4.png](https://i-blog.csdnimg.cn/blog_migrate/0d1f6c8f0485c953570b3d138b0ee8a3.jpeg)
除此之外,还有一个叫做 click 的第三方库,也是用来创建命令的,不同的是它可以用装饰器的方式实现,你可以直接使用 @click.option 来定义命令选项,用起来相对简单,这是一个官方的例子:
![a97b1fa6b712af0bd0ddd960c8861de8.png](https://i-blog.csdnimg.cn/blog_migrate/e81d7b37d997dbb540c7d8ca8f6f16b5.jpeg)
使用起来是这样的:
![386658dabf80b26cdbda90d6d74b6576.png](https://i-blog.csdnimg.cn/blog_migrate/6147706a3dbe837c6ea3fbcbe6359d59.jpeg)
![8c9429dfc4922f340882206818c0a427.png](https://i-blog.csdnimg.cn/blog_migrate/e148f543110d65896e0c76ba2207f608.jpeg)
当然,它还提供了多种创建命令的方式,你可以在以下链接中找到:
https://click.palletsprojects.com/en/6.x/
ok,以上就是小帅b今天给你带来的分享,希望对你有帮助,那么我们下回见,peace!
![923c92df4882d9bdc3d835e204789aea.gif](https://i-blog.csdnimg.cn/blog_migrate/269566117297ff8d620f95fc2c83ae91.gif)
关注我
学习 Python 没烦恼
请拼命点赞