用Python打造自己的專屬命令行工具

在日常的開發和使用過程中,我們常常會編寫一些實用的Python腳本,比如用來批量處理文件、獲取系統信息等。然而,每次都要輸入python script_name.py來運行腳本,時間一長難免覺得繁瑣。要是能像使用系統自帶的命令(如lscd)一樣,直接在命令行輸入自定義的命令就能執行腳本,那該多方便!實際上,通過幾個簡單的步驟,我們就能將Python腳本變成真正的命令行命令,大幅提升使用效率。

就像類 Unix 系統中常用的wc -l命令用于統計文件行數一樣,接下來,我將通過創建一個功能與之等同的自定義命令count_lines ,分別在類 Unix 系統(如 Linux、macOS)和 Windows 系統中展開講解,詳細說明將 Python 腳本變為命令行命令的實現過程。

案例腳本準備

我們先編寫一個簡單的Python腳本count_lines.py,它的功能是讀取指定文本文件,并輸出文件的行數。代碼如下:

import sysif 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是要統計行數的文件)來運行這個腳本。

$ python count_lines.py test.txt
文件 test.py 的行數為: 177

但是這明顯不夠便捷。接下來,我們就一步步把它變成真正的命令行命令。

一. 類Unix系統實現步驟

步驟一:賦予腳本可執行權限

在類Unix系統(如Linux、macOS)中,文件默認是沒有可執行權限的。我們需要使用chmod命令為腳本賦予可執行權限,具體操作如下:

$ chmod +x count_lines.py

執行完上述命令后,count_lines.py就具備了可執行屬性。此時,我們可以嘗試運行腳本,但需要注意,由于當前目錄默認不在系統的PATH環境變量中,我們需要使用相對路徑來運行,即:

$./count_lines.py test.txt

不過,直接運行可能會遇到錯誤,因為系統此時還不知道該用Python解釋器來執行這個腳本,它會嘗試以Shell腳本的方式去執行,從而導致語法錯誤。別擔心,我們接著進行下一步操作。

步驟二:添加解釋器shebang

Shebang(也稱為Hashbang)是一個特殊的符號,它的作用是告訴系統應該使用哪個解釋器來執行腳本。對于Python腳本,我們通常添加#!/usr/bin/env python這一行作為腳本的第一行。使用env的好處在于,它可以根據系統的PATH環境變量找到正確的Python解釋器,避免了因Python安裝路徑不同而導致的問題。

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

#!/usr/bin/env python
import sysif 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后,我們再次嘗試運行腳本:

$./count_lines.py test.txt

此時,腳本就能正常運行了。而且,我們還可以去掉腳本的.py擴展名,讓它看起來更像一個系統命令:

$ mv count_lines.py count_lines
$./count_lines test.txt

步驟三:將命令添加到PATH環境變量

雖然現在我們可以通過./count_lines來運行腳本,但還是不夠方便,因為必須在腳本所在的目錄下執行。為了能在任意目錄下都能運行這個命令,我們需要將腳本所在的目錄添加到系統的PATH環境變量中。

不建議直接將腳本復制到系統級的目錄(如/usr/bin/usr/local/bin),因為這樣可能會引發命名沖突,甚至影響系統穩定性。比較好的做法是在用戶主目錄下創建一個bin目錄,然后將腳本復制到該目錄,并將bin目錄添加到PATH中。

  1. 創建bin目錄
$ mkdir -p ~/bin
  1. 復制腳本到bin目錄
$ cp count_lines ~/bin
  1. 臨時添加bin目錄到PATH(僅對當前會話有效)
$ export PATH=$PATH:$HOME/bin

如果希望設置永久生效,需要將上述命令添加到用戶主目錄下的.profile.bash_profile文件中。以.bash_profile為例,使用文本編輯器打開該文件:

$ vi ~/.bash_profile

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

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,使用文本編輯器打開,并添加以下內容:

@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擴展名),不過需要注意,這樣可能會與系統中其他同名文件或命令產生沖突,操作時需謹慎。

PS E:\> count_lines test.txt
文件 test.py 的行數為: 177

通過以上步驟,無論是在類Unix系統還是Windows系統中,我們都成功將Python腳本變成了便捷的命令行命令。當然,Python在命令行工具開發方面的潛力遠不止于此。利用clickargparse等強大的庫,我們還能開發出功能更豐富、交互更友好的命令行應用。后續,我也會分享更多關于Python命令行工具開發的進階內容,幫助大家打造出更專業、更實用的工具。如果你在實踐過程中遇到任何問題,歡迎隨時交流討論!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/79569.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/79569.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/79569.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【KWDB 創作者計劃】KWDB 2.2.0多模融合架構與分布式時序引擎

KWDB介紹 KWDB數據庫是由開放原子開源基金會孵化的分布式多模數據庫&#xff0c;專為AIoT場景設計&#xff0c;支持時序數據、關系數據和非結構化數據的統一管理。其核心架構采用多模融合引擎&#xff0c;集成列式時序存儲、行式關系存儲及自適應查詢優化器&#xff0c;實現跨模…

學習Linux的第二天

如何在Linux環境下做開發 Linux的一些基操 Tips&#xff1a;平常最表層的是命令行模式&#xff0c;最多見這個默認叫做命令行模式 Vi操作是什么意思呢 就是在提示符輸入vi a.c 是可以創建一個a.c這個文件并進入這個輸入模式 按i可以輸入代碼 要退出的時候按esc 再按:(冒號…

鏈表操作練習

要求 現在有一個雙向鏈表&#xff0c;里面要保存歌曲的名字&#xff1b;例如 蔡琴/渡口.mp3 我們把它定義在一個link.h文件中。 #ifndef LINK_H #define LINK_H #include <stdlib.h> #include <stdio.h> #include <string.h>typedef struct Node {//保存歌…

MATLAB制作散點圖:從基礎到進階的三種類型講解

一、什么是散點圖 散點圖是一種用來展示兩個或多個變量之間關系的圖表形式。它可以幫助我們直觀地觀察變量之間是否存在相關性、趨勢或異常值&#xff0c;常用于數據分析的初步探索階段。 二、三種類型散點圖 1. 基本二維散點圖&#xff1a;最簡單、最常用 基本二維散點圖的…

模塊方法模式(Module Method Pattern)

&#x1f9e0; 模塊方法模式&#xff08;Module Method Pattern&#xff09; 模塊方法模式是一種結構型設計模式&#xff0c;它將復雜的操作分解成一系列相對簡單、獨立且單一職責的模塊。每個模塊負責完成一種具體的操作&#xff0c;其他模塊或系統可以通過調用這些模塊的公開…

Python中的JSON庫,詳細介紹與代碼示例

目錄 1. 前言 2. json 庫基本概念 3. json 的適應場景 4. json 庫的基本用法 4.1 導 json入 模塊 4.2 將 Python 對象轉換為 JSON 字符串 4.3 將 JSON 字符串轉換為 Python 對象 4.4 將 Python 對象寫入 JSON 文件 4.5 從 JSON 文件讀取數據 4.6 json 的其他方法 5.…

網狐旗艦大聯盟組件源碼私測筆記:結構分層、UI重構與本地實操全流程

作為一套衍生于傳統網狐架構的源碼版本&#xff0c;大聯盟這套源碼組件可謂是在經典基礎上進行了深度重塑。與老版死板的框架風格不同&#xff0c;它不僅對界面做了大刀闊斧的重構&#xff0c;還在組件層級的組織上做了優化。本文將基于一整套源碼進行深度解析&#xff0c;強調…

STM32 PulseSensor心跳傳感器驅動代碼

STM32CubeMX中準備工作&#xff1a; 1、設置AD 通道 2、設置一個定時器中斷&#xff0c;間隔時間2ms&#xff0c;我這里采用的是定時器7 3、代碼優化01 PulseSensor.c文件 #include "main.h" #include "PulseSensor/PulseSensor.h"/******************…

C++項目容易犯錯的點

1. 矩陣q要先定義大小&#xff0c;再賦值。不可以直接賦值。下面這種方式是錯誤的Eigen::MatrixXd q&#xff1b;q<<1,2&#xff1b;正確的這樣的&#xff1a; Eigen::MatrixXd q(2,1); q<<1.4, 1.5; 2. 不要重復加載variables.h頭文件&#xff0c;這樣變量會被…

在阿里云 Ubuntu 24.04 上部署 RabbitMQ:一篇實戰指南

前言 RabbitMQ 是業界常用的開源消息中間件,支持 AMQP 協議,易于部署、高可用、插件豐富。本文以阿里云 ECS 上運行的 Ubuntu 24.04 LTS 為例,手把手帶你完成 RabbitMQ 從倉庫配置到運行的全流程,并分享在國內環境下常見的坑與對應解決方案。 環境概況 操作系統:Ubuntu …

【論文筆記】SOTR: Segmenting Objects with Transformers

【題目】&#xff1a;SOTR: Segmenting Objects with Transformers 【引用格式】&#xff1a;Guo R, Niu D, Qu L, et al. Sotr: Segmenting objects with transformers[C]//Proceedings of the IEEE/CVF international conference on computer vision. 2021: 7157-7166. 【網…

MinIO實現https訪問

Windows下實現MinIO的https訪問. 首先需要自己解決證書問題, 這里可以是個人證書 也可以是花錢買的證書. 現在使用個人開發者證書舉例子。 將證書數據解壓到你知道的目錄之下 然后直接使用命令啟動MinIO start minio.exe server --certs-dir D:\xxxxx\tools\certs …

基于 jQuery 實現靈活可配置的輸入框驗證功能

在 Web 表單開發中&#xff0c;輸入框驗證是保障數據準確性和安全性的關鍵環節。無論是用戶注冊、信息提交還是數據錄入場景&#xff0c;都需要對用戶輸入內容進行合法性檢查。本文將介紹如何使用 HTML、CSS 和 jQuery 構建一個可靈活配置的輸入框驗證系統&#xff0c;輕松應對…

Kotlin 04Flow stateIn 和 shareIn的區別

一 Kotlin Flow 中的 stateIn 和 shareIn 一、簡單比喻理解 想象一個水龍頭&#xff08;數據源&#xff09;和幾個水杯&#xff08;數據接收者&#xff09;&#xff1a; 普通 Flow&#xff08;冷流&#xff09;&#xff1a;每個水杯來接水時&#xff0c;都要重新打開水龍頭從…

WebRTC 服務器之SRS服務器概述和環境搭建

1.概述 SRS&#xff08;Simple Realtime Server&#xff09;是一款高性能、跨平臺的流媒體服務器&#xff0c;支持多種協議&#xff0c;包括 RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH 和 GB28181。本文介紹了 SRS&#xff0c;包括其用途、關鍵功能、架構和支持協議。SRS 旨…

Dify - Embedding Rerank

注意&#xff1a;v100顯卡會出現不適配&#xff0c;不推薦使用 1. 安裝 Docker ubuntu 22.04 docker 安裝&使用_ubuntu22.04 安裝docker-CSDN博客 2. 安裝vllm pip install -U xformers torch torchvision torchaudio triton --index-url https://download.pytorch.org/w…

LeetCode:鏈表的中間結點

1、題目描述 給你單鏈表的頭結點 head &#xff0c;請你找出并返回鏈表的中間結點。 如果有兩個中間結點&#xff0c;則返回第二個中間結點。 示例 1&#xff1a; 輸入&#xff1a;head [1,2,3,4,5] 輸出&#xff1a;[3,4,5] 解釋&#xff1a;鏈表只有一個中間結點&#xff…

LabVIEW溫控系統熱敏電阻滯后問題

在 LabVIEW 構建的溫控系統中&#xff0c;熱敏電阻因熱時間常數大&#xff08;2 秒左右&#xff09;產生的滯后效應&#xff0c;致使控溫出現超調與波動。在不更換傳感器的前提下&#xff0c;可從算法優化、硬件調整和系統設計等維度著手解決。 ? 一、算法優化? 1. 改進 PI…

技術犯規計入個人犯規嗎·棒球1號位

在棒球運動中&#xff0c;雖然沒有“技術犯規”這一特定術語&#xff0c;但存在多種違規行為或違反規則的情況&#xff0c;通常會導致判罰或處罰。以下是常見的違規行為及相關規則&#xff1a; 1. 投手違規&#xff08;Balk&#xff09; 定義&#xff1a;投手在壘上有跑壘員時…

Python核心技巧 類與實例:面向對象編程的基石

、核心概念圖解 &#x1f3af; 類 vs 實例 類&#xff1a;對象的藍圖&#xff08;如"汽車設計圖"&#xff09; 實例&#xff1a;類的具體實現&#xff08;如"你的特斯拉Model 3"&#xff09; class MyClass: # 類聲明 count 0 # 類…