Python 命令行工具怎麼寫提示詞(argparse / Typer:子命令、參數校驗、幫助資訊、退出碼與測試)
想把常用的 Python 腳本做成好用的命令行工具(團隊內部工具、數據處理工具)時用:描述命令和參數,得到帶子命令、參數校驗、清晰幫助資訊、有意義退出碼和進度輸出的 CLI 代碼,以及安裝方式和測試。
通用大模型 對話模型通用
你是一名注重使用體驗的 Python 工程師。請幫我把下面的功能做成命令行工具。 - 工具名稱:[如 datatool] - 功能與子命令:[功能與子命令](例:import 導入 CSV、export 導出報表、check 校驗數據) - 每個子命令的參數和選項:[參數說明] - 使用庫:[使用庫](可選:標準庫 argparse/Typer/Click/你推薦) - 使用者:[如團隊內的非開發同事、CI 流水線] 要求: 1. 選擇庫:如果我寫了「你推薦」,根據是否允許第三方依賴、功能複雜度給出建議。 2. 命令設計: - 子命令和參數名清晰一致,長選項用連字符命名,常用選項提供短選項; - 必填與可選的區分、預設值、取值範圍和文件路徑的校驗; - 危險操作(覆蓋、刪除)需要確認,或者提供跳過確認的選項供腳本使用; - 提供預演選項和詳細輸出選項。 3. 幫助資訊:每個命令和參數都有中文說明,並附上使用示例。 4. 輸出:正常結果輸出到標準輸出,日誌和錯誤輸出到標準錯誤,方便在管道中使用;支持機器可讀的輸出格式(如 JSON)供腳本調用。 5. 退出碼:成功為 0,參數錯誤、數據校驗失敗、運行出錯分別使用不同的非零退出碼,並寫在幫助資訊中。 6. 錯誤提示:面向使用者的友好提示,不直接拋出完整堆棧(詳細模式下再顯示)。 7. 長時間任務顯示進度;被中斷時(Ctrl+C)友好退出並清理臨時文件。 8. 打包:在項目配置中聲明命令入口,安裝後可以直接用工具名調用。 9. 測試:針對參數解析和主要命令寫測試,使用對應庫提供的測試工具。 輸出:項目結構、完整代碼(中文註釋)、項目配置中的入口聲明、安裝與使用示例、測試代碼。
高亮處換成你自己的內容:[如 datatool]、[功能與子命令]、[參數說明]、[使用庫]、[如團隊內的非開發同事、CI 流水線]
ChatGPT Plus 充值
已被複製 0 次
使用說明
怎麼填變量:[使用者] 會影響設計重點:給非開發同事用的工具,提示訊息和確認步驟要更友好;給 CI 流水線用的,要有機器可讀輸出、跳過確認的選項和穩定的退出碼。[使用庫] 不想引入依賴就選標準庫 argparse,子命令多、希望少寫代碼可以選 Typer。
常見坑:
- 把進度和日誌打印到標準輸出,結果別人把輸出通過管道傳給其他命令時,數據和日誌混在一起。數據走標準輸出,其他資訊走標準錯誤。
- 所有錯誤都以退出碼 1 結束,調用的腳本無法區分「參數寫錯了」和「數據有問題」。
- 只能用「python 某路徑下的腳本」這種方式運行。在項目配置裏聲明入口,安裝後就能直接輸入工具名使用。
追問技巧:追問「給這個工具加上命令行自動補全,並說明在 bash、zsh、PowerShell 中怎麼啟用」,或「增加一個配置文件,命令行參數優先於配置文件」。
示例輸出
示例,僅供參考(Typer,節選)
python
from pathlib import Path
import typer
app = typer.Typer(help="數據導入導出工具")
EXIT_INVALID_DATA = 3
@app.command("import")
def import_csv(
file: Path = typer.Argument(..., exists=True, readable=True, help="要導入的 CSV 文件"),
dry_run: bool = typer.Option(False, "--dry-run", "-n", help="只校驗不寫入"),
) -> None:
"""導入 CSV 數據。示例:datatool import orders.csv --dry-run"""
errors = validate(file)
if errors:
for e in errors:
typer.echo(f"第 {e.line} 行:{e.message}", err=True)
raise typer.Exit(code=EXIT_INVALID_DATA)
if not dry_run:
write_rows(file)
typer.echo(f"處理完成:{file.name}")
toml
[project.scripts]
datatool = "datatool.cli:app"同款作品
用這條提示詞做出來的作品;原作者會因此獲得積分
還沒有同款,來做第一個。


0 條評論
還沒有評論,來搶沙發~