Python 實戰:打造多文件批量重命名工具

引言

在實際運維、測試、數據分析、開發流程中,我們經常會處理成百上千條命令操作,例如:

  • 各種腳本任務(啟動、備份、重啟、日志查看)

  • 數據處理流程(爬取 → 清洗 → 統計 → 可視化)

  • 配置自動化(環境部署、參數變更)

  • Git 操作(拉取、推送、合并、沖突處理)

如何高效組織這些操作?傳統做法如 bash 腳本 or Makefile 存在諸多限制:

  • 難以組織、無分組、查找不便

  • 不支持搜索/篩選/分頁交互

  • 缺乏狀態反饋、沒有界面結構感

因此我們構建一個 終端交互式命令管理面板,支持以下特性:

  • ? 分組展示命令(如 dev、deploy、git)

  • ? 支持分頁與快速搜索

  • ? 高亮顯示當前項、運行狀態反饋

  • ? 一鍵執行 / 復制命令

  • ? 支持配置文件導入、自動補全


一、功能目標

模塊說明
分組管理支持多個命令組和命令項定義
搜索過濾可輸入關鍵字過濾顯示項
高亮互動上下移動 / 分頁瀏覽 / 回車執行
狀態輸出顯示執行狀態(成功/失敗)
數據持久配置文件支持 JSON / YAML / TOML
擴展能力適配各類 CLI/SSH/腳本調度命令


二、技術棧

用途
textual基于 rich 的 TUI(終端 UI)框架
subprocess執行外部命令并捕獲輸出
pyperclip復制命令到剪貼板(可選)
yaml/json命令配置支持
threading/asyncio支持命令異步執行反饋

安裝依賴

bash

復制編輯

pip install textual rich pyperclip pyyaml


三、項目結構

bash

復制編輯

cli_dashboard/ ├── main.py # 啟動入口 ├── config.yaml # 命令配置文件 ├── dashboard.py # UI 面板主邏輯 ├── executor.py # 命令執行器 └── utils.py # 通用函數


四、配置文件 config.yaml

yaml

復制編輯

groups: - name: DevOps commands: - name: 啟動服務 command: "python run.py" - name: 重啟服務 command: "systemctl restart myapp" - name: Git 管理 commands: - name: 拉取更新 command: "git pull" - name: 查看日志 command: "git log --oneline" - name: 數據處理 commands: - name: 運行分析腳本 command: "python analysis.py"


五、命令執行模塊 executor.py

python

復制編輯

import subprocess def execute(cmd): try: result = subprocess.run(cmd, shell=True, capture_output=True, text=True) if result.returncode == 0: return (True, result.stdout.strip()) else: return (False, result.stderr.strip()) except Exception as e: return (False, str(e))


六、UI 面板主邏輯 dashboard.py

我們使用 textual 構建界面:

python

復制編輯

from textual.app import App, ComposeResult from textual.widgets import Header, Footer, Static, Input, ListView, ListItem from textual.containers import Vertical import yaml from executor import execute class CommandPanel(App): CSS_PATH = "styles.css" def __init__(self, config_file="config.yaml"): super().__init__() self.config_file = config_file self.all_items = [] self.filtered_items = [] def compose(self) -> ComposeResult: yield Header() yield Input(placeholder="🔍 輸入關鍵字過濾命令", id="search") yield ListView(id="cmdlist") yield Static(id="output") yield Footer() def on_mount(self): self.load_commands() def load_commands(self): with open(self.config_file, "r", encoding="utf-8") as f: data = yaml.safe_load(f) for group in data.get("groups", []): gname = group.get("name") for cmd in group.get("commands", []): label = f"[bold]{gname}[/] · {cmd['name']}" self.all_items.append({"label": label, "cmd": cmd["command"]}) self.query_one("#cmdlist").clear() for item in self.all_items: self.query_one("#cmdlist").append(ListItem(Static(item["label"]))) def on_input_changed(self, event: Input.Changed): keyword = event.value.strip().lower() listbox = self.query_one("#cmdlist") listbox.clear() for item in self.all_items: if keyword in item["label"].lower(): listbox.append(ListItem(Static(item["label"]))) def on_list_view_selected(self, event: ListView.Selected): idx = event.index cmd = self.all_items[idx]["cmd"] self.query_one("#output").update(f"[green]運行中:[/] {cmd}") success, output = execute(cmd) if success: self.query_one("#output").update(f"[bold green]? 執行成功:[/]\n{output}") else: self.query_one("#output").update(f"[bold red]? 執行失敗:[/]\n{output}")


七、程序入口 main.py

python

復制編輯

from dashboard import CommandPanel if __name__ == "__main__": CommandPanel().run()


八、運行效果展示

啟動項目:

bash

復制編輯

python main.py

界面效果:

csharp

復制編輯

┌────────────────────────────────────────────┐ │ CLI 插件命令面板(分組展示) │ ├────────────────────────────────────────────┤ │ 🔍 輸入關鍵字過濾命令:python │ │ │ │ ? DevOps · 啟動服務 │ │ DevOps · 重啟服務 │ │ Git 管理 · 拉取更新 │ │ 數據處理 · 運行分析腳本 │ │ │ ├────────────────────────────────────────────┤ │ ? 執行成功: │ │ ... output from subprocess here ... │ └────────────────────────────────────────────┘

支持方向鍵切換命令、回車執行,輸出實時更新。


九、功能增強建議

功能模塊說明
命令分組折疊支持點擊分組展開/折疊命令
命令參數輸入每條命令支持動態參數填寫
執行日志記錄自動記錄運行成功/失敗與時間戳
圖標/emoji 支持命令項支持展示圖標(如 🚀、🗂)
多配置文件切換支持 --config 切換配置源
插件任務擴展與實際腳本、遠程 SSH、API 聯動


十、適用場景

場景應用價值
運維腳本統一入口跨環境部署、服務控制集中管理
數據開發流程管理數據提取、模型更新、清洗繪圖流程集中調用
Git 團隊操作面板常見分支、拉取、提交命令快速執行
教學示范幫助學生理解多命令流程、結構化運行


十一、總結

本項目構建了一個終端交互式命令控制面板,具備:

  • ? 分組展示結構清晰

  • ? 搜索高效,適合命令量大的項目

  • ? 回車執行、狀態輸出一目了然

  • ? 基于配置即可擴展命令項,無需修改主邏輯

你可以將它用于運維面板、部署入口、教學工具,甚至打包為私有命令中心平臺。

bbs.yantuchina.com/read.php?tid=339663

bbs.yantuchina.com/read.php?tid=339664

learnku.com/articles/90356

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

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

相關文章

設計模式筆記_結構型_代理模式

1. 代理模式介紹代理模式是一種結構型設計模式,它允許你提供一個代理對象來控制對另一個對象的訪問。代理對象通常在客戶端和目標對象之間起到中介作用,能夠在不改變目標對象的前提下增加額外的功能操作,比如延遲初始化、訪問控制、日志記錄等…

C語言<數據結構-單鏈表>(收尾)

上篇博客我將基礎的尾插、尾刪、頭插、頭刪逐一講解了,這篇博客將對上篇博客進行收尾,講一下指定位置操作增刪以及查找這幾個函數,其實大同小異:一.查找函數:查找函數其實就是一個簡單的循環遍歷,所以不加以…

十年架構心路:從單機到云原生的分布式系統演進史

十年架構心路:從單機到云原生的分布式系統演進史 這里寫目錄標題十年架構心路:從單機到云原生的分布式系統演進史一、技術生涯的起點:單體架構的黃金時代1.1 典型技術棧1.2 記憶深刻的故障二、分布式架構轉型期2.1 服務化拆分實踐2.2 分布式事…

使用docker搭建nginx

安裝docker 和 docker compose驗證docker版本配置docker目錄配置代理,使docker能訪問外網能否ping通最后直接拉入鏡像即可docker pull nginx

Intel新CPU助攻:微軟Copilot+將登陸臺式電腦

微軟的Copilot PC計劃已經推出一年多,但目前僅支持平板電腦和筆記本電腦,以及少數迷你電腦。 隨著Intel下一代桌面處理器——代號為“Arrow Lake Refresh”的推出,Copilot PC功能有望擴展到桌面計算機。 要支持Copilot PC的所有功能&#xff…

【Kubernetes】跨節點 Pod 網絡不通排查案例

最近在部署一個集群環境的時候,發現集群中一個子節點與其他子節點不通,而 master 節點可與任何子節點互通,通過抓包排查后,發現是 Linux 路由決策導致的。因此,在此記錄下來,希望對大家有所幫助。1、環境及…

【算法訓練營Day11】二叉樹part1

文章目錄理論基礎二叉樹的遞歸遍歷前序遍歷中序遍歷后序遍歷總結二叉樹的層序遍歷基礎層序遍歷二叉樹的右視圖理論基礎 二叉樹在結構上的兩個常用類型: 滿二叉樹完全二叉樹 在功能應用上的比較常用的有: 二叉搜索樹: 節點有權值、遵循”左…

Flutter 之 table_calendar 控件

1.庫導入在pubspec.yaml文件中dev_dependencies:table_calendar: ^3.2.02. 代碼編寫TableCalendar(daysOfWeekHeight: 20,availableGestures: AvailableGestures.horizontalSwipe,firstDay: DateTime.now().subtract(const Duration(days: 365)),lastDay: DateTime.now(),cal…

【leetcode】1486. 數組異或操作

數組異或操作題目題解題目 1486. 數組異或操作 給你兩個整數,n 和 start 。 數組 nums 定義為:nums[i] start 2*i(下標從 0 開始)且 n nums.length 。 請返回 nums 中所有元素按位異或(XOR)后得到的…

php7.4使用 new DateTime;報錯 Class DateTime not found

php7.4使用 new DateTime;報錯Uncaught Error: Class ‘app\home\c\DateTime’ not found 查了半天資料,最后找到了解決辦法 DateTime 是 php 內置的類,不隸屬于任何命名空間,如果你需要在命名空間中使用須有 \ 聲明,解決辦法就是…

Gartner《構建可擴展數據產品建設框架》心得

一、背景與價值 1.1 “數據產品”為什么忽然重要? 傳統模式:業務提出需求 → IT 建數據集 → ETL 管道爆炸 → 維護成本指數級上升。 新范式:把“數據”包裝成“產品”,以產品思維迭代演進,強調復用、自助、可擴展。 Gartner 觀察到:大量組織把“報表”或“數據倉庫”重…

CentOS/RHEL LVM 磁盤擴展完整教程

CentOS/RHEL LVM 磁盤擴展完整教程📝 前言 在Linux系統管理中,磁盤空間不足是經常遇到的問題。特別是在生產環境中,當根分區空間告急時,我們需要通過添加新磁盤來擴展存儲空間。本教程將詳細介紹如何在CentOS/RHEL系統中使用LVM&a…

LVGL應用和部署(用lua做測試)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing 163.com】嵌入式產品做好了,下面就是測試和量產了。以按鍵屏幕的開發模式為例,如果僅僅是簡單的功能測試,那還比較好解決&…

phpstudy搭建pikachu

一.啟動mysql和nginx服務二.修改靶場文件參數點擊管理打開根目錄,將下載好的靶場源文件解壓到www目錄下三.找到此文件用記事本打開四.修改配置文件五.打開瀏覽器,輸入127.0.0.1/pikachu六.按照步驟初始化心得體會:如果mysql啟動又立刻停止,大…

【Linux】GDB/CGDB 調試器學習筆記

GDB/CGDB 調試器學習筆記🚀 前言 GDB 是 GNU 項目下功能強大的命令行調試器,適用于 C/C 等多種語言。CGDB 則是在 GDB 之上構建的輕量級 curses 界面,適合喜歡終端操作且習慣 vi 風格的人。一、GDB 入門篇 1. 編譯時帶調試信息 gcc -g -O0 -W…

鏈接代理后無法訪問網絡

路由方向的問題 cmd 輸入 route print 查看路由多了一個不是你網絡的路由 我的嘎嘎好用直接那都通 route add -p 0.0.0.0 mask 0.0.0.0 0.0.0.0 參考這個 固定ip if是代理鏈路的 鏈路口又敏感詞這個文章不合規兩次評論區問我

day37 早停策略和模型權重的保存

DAY 37 我今天的筆記是用cpu訓練的,請自行修改為gpu訓練 仍然是循序漸進,先復習之前的代碼 import torch import torch.nn as nn import torch.optim as optim from sklearn.datasets import load_iris from sklearn.model_selection import train_test_…

網絡爬蟲分類全解析

網絡爬蟲作為數據獲取的重要工具,其分類方式多樣,不同類型的爬蟲在技術實現、應用場景和功能特性上存在顯著差異。深入理解這些分類,有助于開發者根據實際需求選擇合適的爬蟲方案。本文將從技術特性、應用場景和架構設計三個維度,系統介紹網絡爬蟲的主要分類。 一、按技術…

ECR倉庫CloudFormation模板完整指南

概述 本文檔詳細介紹了一個通用的Amazon ECR(Elastic Container Registry)倉庫CloudFormation模板,該模板支持多業務組、參數化配置,并包含完整的安全策略、生命周期管理和監控功能。 模板特性 核心功能 ? 支持4個業務組:app、ai、mall、frontend? 靈活的服務名手動輸…

C++(STL源碼刨析/List)

一 List 核心字段和接口1. 節點字段template<class T> struct __list_node {typedef void* void_pointer;void_pointer prev;void_pointer next;T data; }由于 鏈表 不是連續的內存塊&#xff0c;所以對每一個申請到的內存塊要進行統一組織&#xff0c;也就是封裝成一個類…