用Python打造自己的专属命令行工具

在日常的开发和使用过程中,我们常常会编写一些实用的Python脚本,比如用来批量处理文件、获取系统信息等。然而,每次都要输入python script_name.py来运行脚本,时间一长难免觉得繁琐。要是能像使用系统自带的命令(如lscd)一样,直接在命令行输入自定义的命令就能执行脚本,那该多方便!实际上,通过几个简单的步骤,我们就能将Python脚本变成真正的命令行命令,大幅提升使用效率。

就像类 Unix 系统中常用的wc -l命令用于统计文件行数一样,接下来,我将通过创建一个功能与之等同的自定义命令count_lines ,分别在类 Unix 系统(如 Linux、macOS)和 Windows 系统中展开讲解,详细说明将 Python 脚本变为命令行命令的实现过程。

案例脚本准备

我们先编写一个简单的Python脚本count_lines.py,它的功能是读取指定文本文件,并输出文件的行数。代码如下:

python 复制代码
import sys

if len(sys.argv) < 2:
    print("请输入要统计行数的文件路径")
    sys.exit(1)

file_path = sys.argv[1]
try:
    with open(file_path, 'r', encoding='utf-8') as file:
        lines = file.readlines()
        print(f"文件 {file_path} 的行数为: {len(lines)}")
except FileNotFoundError:
    print(f"文件 {file_path} 不存在")

目前,我们可以通过python count_lines.py test.txt(假设test.txt是要统计行数的文件)来运行这个脚本。

shell 复制代码
$ python count_lines.py test.txt
文件 test.py 的行数为: 177

但是这明显不够便捷。接下来,我们就一步步把它变成真正的命令行命令。

一. 类Unix系统实现步骤

步骤一:赋予脚本可执行权限

在类Unix系统(如Linux、macOS)中,文件默认是没有可执行权限的。我们需要使用chmod命令为脚本赋予可执行权限,具体操作如下:

shell 复制代码
$ chmod +x count_lines.py

执行完上述命令后,count_lines.py就具备了可执行属性。此时,我们可以尝试运行脚本,但需要注意,由于当前目录默认不在系统的PATH环境变量中,我们需要使用相对路径来运行,即:

shell 复制代码
$./count_lines.py test.txt

不过,直接运行可能会遇到错误,因为系统此时还不知道该用Python解释器来执行这个脚本,它会尝试以Shell脚本的方式去执行,从而导致语法错误。别担心,我们接着进行下一步操作。

步骤二:添加解释器shebang

Shebang(也称为Hashbang)是一个特殊的符号,它的作用是告诉系统应该使用哪个解释器来执行脚本。对于Python脚本,我们通常添加#!/usr/bin/env python这一行作为脚本的第一行。使用env的好处在于,它可以根据系统的PATH环境变量找到正确的Python解释器,避免了因Python安装路径不同而导致的问题。

修改后的count_lines.py脚本如下:

python 复制代码
#!/usr/bin/env python
import sys

if len(sys.argv) < 2:
    print("请输入要统计行数的文件路径")
    sys.exit(1)

file_path = sys.argv[1]
try:
    with open(file_path, 'r', encoding='utf-8') as file:
        lines = file.readlines()
        print(f"文件 {file_path} 的行数为: {len(lines)}")
except FileNotFoundError:
    print(f"文件 {file_path} 不存在")

添加完Shebang后,我们再次尝试运行脚本:

shell 复制代码
$./count_lines.py test.txt

此时,脚本就能正常运行了。而且,我们还可以去掉脚本的.py扩展名,让它看起来更像一个系统命令:

shell 复制代码
$ mv count_lines.py count_lines
$./count_lines test.txt

步骤三:将命令添加到PATH环境变量

虽然现在我们可以通过./count_lines来运行脚本,但还是不够方便,因为必须在脚本所在的目录下执行。为了能在任意目录下都能运行这个命令,我们需要将脚本所在的目录添加到系统的PATH环境变量中。

不建议直接将脚本复制到系统级的目录(如/usr/bin/usr/local/bin),因为这样可能会引发命名冲突,甚至影响系统稳定性。比较好的做法是在用户主目录下创建一个bin目录,然后将脚本复制到该目录,并将bin目录添加到PATH中。

  1. 创建bin目录
shell 复制代码
$ mkdir -p ~/bin
  1. 复制脚本到bin目录
shell 复制代码
$ cp count_lines ~/bin
  1. 临时添加bin目录到PATH(仅对当前会话有效)
shell 复制代码
$ export PATH=$PATH:$HOME/bin

如果希望设置永久生效,需要将上述命令添加到用户主目录下的.profile.bash_profile文件中。以.bash_profile为例,使用文本编辑器打开该文件:

shell 复制代码
$ vi ~/.bash_profile

在文件末尾添加以下内容:

shell 复制代码
export PATH=$PATH:$HOME/bin

保存并关闭文件后,执行source ~/.bash_profile使配置立即生效。

完成上述步骤后,我们就可以在任意目录下,像使用系统命令一样,直接输入count_lines test.txt来统计文件行数了。

二. Windows系统实现步骤

在Windows系统中,将Python脚本变成命令行命令的方式与类Unix系统有所不同,主要通过以下几个步骤来实现:

步骤一:创建批处理文件

批处理文件(.bat)是Windows系统中用于自动执行一系列命令的文件。我们可以创建一个批处理文件,在其中指定使用Python解释器来运行我们的脚本。在脚本count_lines.py所在的目录下,新建一个文本文件,命名为count_lines.bat,使用文本编辑器打开,并添加以下内容:

batch 复制代码
@echo off
python count_lines.py %*

@echo off用于关闭批处理文件执行过程中的命令回显,让界面更加简洁。python count_lines.py %*表示使用Python解释器运行count_lines.py脚本,并将命令行中输入的参数传递给脚本。

步骤二:配置环境变量

为了能在任意目录下运行count_lines.bat,我们需要将其所在目录添加到系统的环境变量中。具体操作如下:

  1. 打开"系统属性":右键点击"此电脑",选择"属性",在弹出的窗口中点击"高级系统设置"。

  2. 进入"环境变量"设置 :在"系统属性"窗口的"高级"选项卡中,点击"环境变量"按钮。

  3. 编辑Path环境变量 :在"系统变量 "列表中找到Path变量,点击"编辑"。

  4. 添加路径 :点击"新建",输入count_lines.bat所在的目录路径(例如C:\scripts,根据实际情况填写),然后点击"确定"保存设置。

步骤三:测试命令

完成环境变量配置后,打开命令提示符(CMD)或PowerShell,在任意目录下输入count_lines.bat test.txt,即可运行脚本统计文件行数。如果希望直接输入count_lines test.txt就能运行,可以将count_lines.bat改名为count_lines(去掉.bat扩展名),不过需要注意,这样可能会与系统中其他同名文件或命令产生冲突,操作时需谨慎。

cmd 复制代码
PS E:\> count_lines test.txt
文件 test.py 的行数为: 177

通过以上步骤,无论是在类Unix系统还是Windows系统中,我们都成功将Python脚本变成了便捷的命令行命令。当然,Python在命令行工具开发方面的潜力远不止于此。利用clickargparse等强大的库,我们还能开发出功能更丰富、交互更友好的命令行应用。后续,我也会分享更多关于Python命令行工具开发的进阶内容,帮助大家打造出更专业、更实用的工具。如果你在实践过程中遇到任何问题,欢迎随时交流讨论!

相关推荐
志存高远662 分钟前
kotlin 扩展函数
android·开发语言·kotlin
LingRannn1 小时前
【最新Python包管理工具UV的介绍和安装】
开发语言·python·uv
yuanjun04161 小时前
RTDETRv2 pytorch训练
人工智能·pytorch·python
杰克逊的日记2 小时前
什么是PyTorch
人工智能·pytorch·python
Sheep Shaun2 小时前
C++类与对象—下:夯实面向对象编程的阶梯
c语言·开发语言·数据结构·c++·算法
AIGC魔法师3 小时前
轮播图导航组件 | 纯血鸿蒙组件库AUI
开发语言·harmonyos·openharmony·鸿蒙开发·纯血鸿蒙·arkui / ets·鸿蒙组件库aui
后藤十八里3 小时前
Python格式化字符串的四种方法
开发语言·python·学习
Little_Yuu4 小时前
抽奖系统(基于Tkinter)
开发语言·python
豌豆花下猫4 小时前
uv全功能更新:统一管理Python项目、工具、脚本和环境的终极解决方案
后端·python·ai
消失的dk4 小时前
Softmax回归与单层感知机对比
python·深度学习