注:在命令行中应用 Python 时,“-m”选项参数能够实现十分弱小的性能能够说,善用“-m”参数,这是一个优良的 Python 技术人的必备技能
明天分享的文章介绍了 8 种十分实用的小性能,心愿能给大家带来帮忙!
近几年 Python 语言之所以风行,是因为咱们能够应用它编写更少的代码来实现简单的性能。Python 开发者十分欢送那些封装了简单实现然而对使用者非常敌对的工具包
然而,Python 的简便性不止如此。你能置信咱们能够在不写任何代码的状况下应用 Python 吗?在接下来的文章中,咱们会介绍 8 个无需编写任何代码即可应用 Python 内置性能的例子
0. Python CLI“-m”参数
咱们首先从 Python CLI(命令行界面)开始谈起。尽管咱们不用编写代码来应用稍后介绍的性能,然而为了让 Python 晓得咱们要执行的内容,咱们须要应用 Python 命令行来进行操作。
只有咱们的电脑上装置了 Python 环境,咱们就能够在 Python 命令行界面输出 python --help
显示所有反对的参数。
因为命令输入的内容太长,上图仅显示了局部内容。这里最想强调的是 -m mod
参数,它会将 Python 模块以脚本的模式运行。因而,如果该模块的实现反对命令行操作,咱们就能够在命令行间接应用它。接下来就让咱们体验一下:)
1. 服务端口测试
有时候,咱们想测试 ip 端口的出站网络流量,通常 telnet 命令是一个不错的抉择。在 Windows 平台上默认没有装置 telnet 软件,应用前须要手动装置。如果只是进行简略的测试,将来应用场景也不多,装置它可能是一种资源节约。
然而,如果装置了 Python,那就不用下载安装 telnet,因为 Python 内置了 telnet 对应的模块。咱们能够对 Google 搜寻网站的 443 端口进行测试。
python -m telnetlib -d 142.250.70.174 443
如上图所示,网络流量显示失常,咱们甚至收到了来自 Google 空字符的响应。如果咱们尝试拜访 ip 的随机一个端口,则会抛出谬误,如下图所示。
python -m telnetlib -d 142.250.70.174 999
2. 本地启动 web 服务
很多 Python 使用者不晓得这一点,当第一次据说后会感到诧异。是的,咱们能够应用 Python 启动 web 服务,而无需编写任何代码,只需按如下形式在命令行执行如下命令。
python -m http.server
运行后,显示该服务监听了本地的 8000 端口,而后,咱们就能够尝试从浏览器进行拜访 http://localhost:8000/。
该 web 服务会以根目录的模式展现在命令启动门路下的本地文件系统,换句话说,咱们无法访问它的父级目录。
你可能会问,这个性能的应用场景是什么。举一个例子,如果你想跟你的好搭档们分享你电脑某个目录下的许多文本 /PDF/ 图像文件 / 子目录文件等,那么应用这个办法就能够十分轻松地进行共享了。
如果你想晓得更多对于这个话题的内容,能够参考 3 Lines of Python Code to Write A Web Server 这篇文章。如果你依照下面的文章实现了一个“低代码”的解决方案,那么就能够向它增加更多的自定义性能了。
3. 验证及格式化 JSON 字符串
如果你有一个十分长且未经格式化的 JSON 字符串,那么浏览起来会十分艰难。通常,我会应用一些带有 JSON 插件的文本编辑器,比方 Sublime 或者 VS Code,来格式化 JSON 字符串。然而,如果手头没有这些工具,Python 能够长期一用。比方上面会以这个简短的 JSON 字符串进行展现。
echo '{"name": {"first_name":"Chris","last_name":"Tao"}"age":33}'
能够看到,以后操作系统的命令行工具只能依照原字符串的原始格局进行展现。然而,如果借助 Python 的 json.tool
工具,JSON 字符串就会被很好的格式化。
echo '{"name": {"first_name":"Chris","last_name":"Tao"}"age":33}' | python -m json.tool
Oops!JSON 字符串有效,并且 json.tool 帮忙咱们定位了问题。咱们在名称对象前面漏掉了一个逗号。所以增加逗号以使该 JSON 非法无效。
echo '{"name": {"first_name":"Chris","last_name":"Tao"},"age":33}' | python -m json.tool
当初,JSON 字符串具备了完满缩进的格式化输入!更加不便浏览。
4. 创立文本编辑器
你没看错,咱们能够应用 Python 来”创立”一个文本编辑器。当然,它的性能十分无限,然而如果以后没有更好的抉择,应用它会不便很多。另外,性能上必定无奈与 Vim 和 Nanos 相比,然而它齐全是基于 UI 编辑器而不是命令行文本模式。这个编辑器由基于 Tkinter 实现的idlelib
模块创立,所以它是能够跨平台运行的。
假如咱们要编写一个简略的 Python 程序来显示以后的工夫,我想疾速编写代码而不想下载和装置宏大的代码编辑工具。当初让咱们运行上面这个命令。
mkdir get_time_apppython -m idlelib get_time_app/print_time.py
如果文件目录不存在,idlelib
将无奈创立,因而如果必要,咱们须要创立一个。咱们运行完这个命令之后,print_time.py 只有执行保留的状况下才会创立到本地。当初应该会弹出编辑器,咱们能够在外面写一些代码,能够看到代码是反对语法高亮的。
当初咱们应用 ctrl+s
快捷键对编辑好的代码进行保留,并敞开编辑窗口。接下来应用命令行查看一下编辑好的代码文件进行验证,没有任何问题。
cat get_time_app/print_time.py
5. 创立可执行应用程序
如果咱们想要创立一个简略的利用,比方后面写的获取以后工夫的应用程序,咱们不用再须要像 PyInstaller 这样的第三方工具包,Python 内置的 Zipapp 就能够做到。假如咱们要打包成一个 ”Get Time” 的利用,咱们能够在命令行运行上面的命令。
python -m zipapp get_time_app -m "print_time:main"
在该命令中,咱们只须要给 zipapp
设置 get_time_app
名称,指定 Python 程序的入口文件及其程序入口函数即可。以 .pyz
为扩展名的文件就是咱们创立的应用程序,至此咱们就能够将我的项目作为单个文件而不是文件夹进行散发。
该程序的启动形式也很简略,间接应用 Python 进行调用即可。
python get_time_app.pyz
6. 编码和解码字符串或文件
通过 Python CLI,咱们能够加密字符串或文件。咱们以乏味的 ROT13 加密算法为例进行展现。ROT13 是一种偏移 13 位的凯撒明码,它的加密原理如下图所示。
咱们能够应用 encodings.rot_13
来加密一个字符串,命令如下。
echo "I am Chris" | python -m encodings.rot_13
切记,不要将其用于任何真正的加密内容。因为英文有 26 个字母,所以再次运行这个算法咱们能够很容易地破译这个加密字符串:)
echo 'V nz Puevf' | python -m encodings.rot_13
当初让咱们尝试一个更常见的场景——base64 编码。咱们能够对字符串进行 base64 编码,如下所示。
echo "I am Chris" | python -m base64
接下来,咱们也能够应用 -d
参数对加密字符串进行解码。
echo "SSBhbSBDaHJpcwo=" | python -m base64 -d
base64 也常常用在对图像文件的编码和解码上。咱们也能够对文件进行如下编码。
python -m base64 get_time_app/print_time.py
十分乏味的是,解码后的 Python 脚本能够即时执行,不会报错。。
echo "ZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKCgpkZWYgbWFpbigpOgogICAgY3VycmVudF90aW1lID0gZGF0ZXRpbWUubm93KCkKICAgIHByaW50KGYnQ3VycmVudCB0aW1lIGlzIHtjdXJyZW50X3RpbWV9LicpCgoKaWYgX19uYW1lX18gPT0gJ19fbWFpbl9fJzoKICAgIG1haW4oKQo=" | python -m base64 -d | python
7. 获取零碎元数据
如果咱们想获取以后的零碎信息,Python 提供了一种十分简便的办法。咱们只须要运行上面的命令即可。
python -m sysconfig
能够看到,这个命令执行后会显示所有的系统配置信息,比方 Python 环境门路和环境变量等。下面的截图仅仅展现了一部分内容,理论显示的内容会十分丰盛。如果咱们只想展现 Python 环境门路和当前工作门路,咱们能够执行上面的命令。
python -m site
8. 文件压缩
咱们能够应用 Python 来压缩文件,而无需下载 tar/zip/gzip 等工具。举个例子,如果咱们想压缩咱们刚刚在第 4 节中编写的应用程序,咱们能够运行以下命令将文件夹压缩到 zip 文件中。在命令中,选项 -c 代表的是“create”即创立的含意。
python -m zipfile -c get_time_app.zip get_time_app
当然,咱们也能够对压缩文件进行解压。紧接这下面的操作,咱们把文件夹解压进去放到一个新目录中,这样就不会和原来的目录抵触了。在上面的命令中,选项 -e 代表“extract”即解压的含意。
python -m zipfile -e get_time_app.zip get_time_app_extracted
如果不释怀,咱们能够测验一下。
ls get_time_app_extractedcat get_time_app_extracted/get_time_app/print_time.py
咱们刚刚以 zip 文件为例进行了展现,Python 除了反对 zip 格局的解压缩以外,还反对 tar 和 gzip 的解压缩。
总结
该篇文章中介绍了一种无需编写任何代码即可应用 Python 内置库的办法。如果在某些场景下可能想到应用这些办法,毫无疑问能够给咱们提供很多的便当。心愿这篇文章可能给大家带来启发和帮忙。
如果你感觉文章还不错,欢送关注公众号:Python 编程学习圈,或是返回编程学习网,理解更多编程技术常识,还有大量干货学习材料能够支付!