天天看點

了解完Python标準庫中隐藏的CLI工具後效率提升2倍

作者:SuperOps
了解完Python标準庫中隐藏的CLI工具後效率提升2倍

必須了解的實用小工具

Python标準庫中有一些實用的CLI(指令行界面)工具,可以通過運作python -m xxx來調用。以下介紹如何使用ripgrep查找這些工具:

使用ripgrep查找Python标準庫中的子產品

Ripgrep是一個功能強大的指令行搜尋工具,可用于快速搜尋代碼檔案和目錄。

使用ripgrep查找Python标準庫中的子產品可以幫助開發人員快速了解Python标準庫中有哪些子產品可用。以下是使用ripgrep查找Python标準庫中的子產品的詳細步驟:

  1. 安裝ripgrep

首先需要安裝ripgrep才能使用它來查找Python标準庫中的子產品。ripgrep是一個快速、高效的文本搜尋工具,可以在GitHub上下載下傳安裝包,也可以使用包管理器安裝,例如在Linux上使用apt-get指令:

sudo apt-get install ripgrep           
  1. 運作ripgrep指令

在指令行中使用ripgrep指令,指定要搜尋的目錄,例如Python安裝目錄下的Lib目錄:

rg 'if __name__ ==' -l /usr/lib/python3.8           

這個指令會輸出Python标準庫中的所有子產品。其中,-l選項表示隻列出比對的檔案名,而不顯示比對的内容。

  1. 過濾搜尋結果

ripgrep搜尋結果會包含Python标準庫中的所有子產品,需要進一步過濾結果以排除不需要的子產品。可以使用Linux指令行工具grep來過濾結果,例如:

rg 'if __name__ ==' -l /usr/lib/python3.8 | grep -v 'test/' | grep -v idlelib | grep -v turtledemo           

這個指令會排除包含test/​、idlelib/​和turtledemo/​的子產品,進而得到更幹淨的搜尋結果。

  1. 檢視搜尋結果

ripgrep搜尋結果會列出所有比對的檔案名,這些檔案名對應Python标準庫中的子產品。可以使用cat​指令檢視某個子產品的内容,例如:

cat /usr/lib/python3.8/http/server.py           

這個指令會輸出http.server​子產品的内容,幫助開發人員了解子產品的功能和用法。

常用工具介紹

  • http.server

​http.server​是一個簡單的HTTP伺服器,可用于通過HTTP從目錄中提供檔案。要啟動伺服器,請導航到要提供的目錄并運作:

python -m http.server           

這将在預設情況下啟動端口8000上的伺服器。可以通過将其作為參數傳遞來指定不同的端口,例如python -m http.server 8080​。

  • base64

​base64​是一個子產品,提供了使用Base64編碼方案對二進制資料進行編碼和解碼的功能。要編碼一個字元串,可以運作:

echo "hello world" | python -m base64           

這将輸出Base64編碼的字元串aGVsbG8gd29ybGQK​。要解碼Base64字元串,可以運作:

echo "aGVsbG8gd29ybGQK" | python -m base64 -d           

這将輸出解碼後的字元串hello world​。

  • asyncio

​asyncio​是一個子產品,提供了一個架構,用于在Python中編寫異步I/O代碼。它可用于編寫高性能的網絡伺服器、Web應用程式等。要使用asyncio,需要編寫一個事件循環和與之互動的協程。這裡是一個簡單的示例:

import asyncio

async def hello():
    print("Hello")
    await asyncio.sleep(1)
    print("World")

loop = asyncio.get_event_loop()
loop.run_until_complete(hello())           

此代碼定義了一個協程hello​,它列印"Hello",睡眠一秒鐘,然後列印"World"。然後,它使用run_until_complete​在事件循環中運作協程。

  • tokenize

​tokenize​是一個子產品,提供了一個Python源代碼的标記器。它可用于解析Python代碼并提取資訊,如變量和函數的名稱。要對Python檔案進行标記化,可以運作:

python -m tokenize <filename>           

這将輸出一個表示代碼結構的标記序列。

  • ast

​ast​是一個子產品,提供了Python源代碼的抽象文法樹(AST)。它可用于解析Python代碼并以比tokenize​更結構化的方式分析其結構。要将Python檔案解析為AST,請運作:

import ast

with open("example.py") as f:
    code = f.read()

tree = ast.parse(code)           

這将将example.py​中的代碼解析為AST,可以對其進行程式設計分析和操作。

  • json.tool

​json.tool​是一個子產品,提供了一個指令行工具,用于格式化和驗證JSON資料。要格式化JSON檔案,可以運作:

cat data.json | python -m json.tool           

這将輸出格式化的JSON資料。

  • random

​random​是一個子產品,提供了生成随機數和從清單中選擇随機元素的功能。例如,要生成1到10之間的随機整數,可以運作:

import random

x = random.randint(1, 10)
print(x)           

這将輸出1到10之間的随機整數。

  • ​​nntplib​

nntplib​子產品:提供NNTP(網絡新聞傳輸協定)用戶端支援。

python -m nntplib news.example.com           

該指令将連接配接到NNTP伺服器news.example.com​,并列印出伺服器的歡迎資訊。

  • calendar

​calendar​子產品:提供月曆生成功能。

python -m calendar           

該指令将生成目前年份的月曆,并将其輸出到标準輸出。

2023

      January                   February                   March
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                   1             1  2  3  4  5             1  2  3  4  5
 2  3  4  5  6  7  8       6  7  8  9 10 11 12       6  7  8  9 10 11 12
 9 10 11 12 13 14 15      13 14 15 16 17 18 19      13 14 15 16 17 18 19
16 17 18 19 20 21 22      20 21 22 23 24 25 26      20 21 22 23 24 25 26
23 24 25 26 27 28 29      27 28                     27 28 29 30 31
30 31

       April                      May                       June
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                1  2       1  2  3  4  5  6  7                1  2  3  4
 3  4  5  6  7  8  9       8  9 10 11 12 13 14       5  6  7  8  9 10 11
10 11 12 13 14 15 16      15 16 17 18 19 20 21      12 13 14 15 16 17 18
17 18 19 20 21 22 23      22 23 24 25 26 27 28      19 20 21 22 23 24 25
24 25 26 27 28 29 30      29 30 31                  26 27 28 29 30

        July                     August                  September
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                1  2          1  2  3  4  5  6                   1  2  3
 3  4  5  6  7  8  9       7  8  9 10 11 12 13       4  5  6  7  8  9 10
10 11 12 13 14 15 16      14 15 16 17 18 19 20      11 12 13 14 15 16 17
17 18 19 20 21 22 23      21 22 23 24 25 26 27      18 19 20 21 22 23 24
24 25 26 27 28 29 30      28 29 30 31               25 26 27 28 29 30
31

      October                   November                  December
Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su
                   1             1  2  3  4  5                   1  2  3
 2  3  4  5  6  7  8       6  7  8  9 10 11 12       4  5  6  7  8  9 10
 9 10 11 12 13 14 15      13 14 15 16 17 18 19      11 12 13 14 15 16 17
16 17 18 19 20 21 22      20 21 22 23 24 25 26      18 19 20 21 22 23 24
23 24 25 26 27 28 29      27 28 29 30               25 26 27 28 29 30 31
30 31
           

這個子產品還有更多的選項(使用-h參數可見)。例如,使用python -m calendar -t html可以将月曆以HTML格式顯示。

這些常用的工具,可以幫助開發人員快速完成一些常見的任務。

跟一線大廠架構師學python

《Python Tricks》專欄是我最近在寫的一本針對Python開發人員的實用程式設計指南,涵蓋了Python中最強大和有用的特性和技巧。從基礎知識入手,深入介紹函數式程式設計、面向對象程式設計、并發程式設計、網絡程式設計、Web開發、資料處理和機器學習等内容。透徹解析Python語言特性,提供實踐案例和示例代碼,幫助您優雅解決各種問題。

如果您對python asyncio異步程式設計模型感興趣,可以關注我的《python asyncio從入門到精通》專欄。