Python安裝之後,其標準庫中有的模組,不一定要透過程式碼來引用,還可以直接在命令列中使用的。
在命令列中直接使用Python
標準庫的模組,最大的好處就是就是不用寫程式碼,就能使用其中的功能,
當臨時需要一些某些功能的時候,用這種方式會快捷,方便很多。
1. 命令列中使用模組
命令列中使用python
標準庫的模組,一般格式如下:
python -m <mod-name> <options>
其中,mod-name
是模組的名稱;options
是模組的引數。
本篇列舉的是我自己在命令列中常用的一些模組,並不是所有可在命令列中可用的模組。
其它好用的模組,歡迎大家推薦。
2. http.server:靜態檔案服務
http.server
模組的引數主要有:
python -m http.server -h
usage: server.py [-h] [--cgi] [-b ADDRESS] [-d DIRECTORY] [-p VERSION] [port]
positional arguments:
port bind to this port (default: 8000)
options:
-h, --help show this help message and exit
--cgi run as CGI server
-b ADDRESS, --bind ADDRESS
bind to this address (default: all interfaces)
-d DIRECTORY, --directory DIRECTORY
serve this directory (default: current directory)
-p VERSION, --protocol VERSION
conform to this HTTP version (default: HTTP/1.0)
主要的引數:
- -b:如果需要讓區域網的其他機器訪問,可以設定
-b 0.0.0.0
- -d:設定靜態檔案服務的根目錄
建立一個目錄作為靜態檔案服務的根目錄,並放入一個index.html
檔案。
html檔案內容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>http.server</title>
</head>
<body>
<h1>hello</h1>
<br />
<h1>python -m http.server</h1>
</body>
</html>
啟動服務,效果如下:
python -m http.server -d ./sample-site
3. gzip:壓縮/解壓縮
gzip
模組可用來壓縮,解壓縮檔案。
python -m gzip -h
usage: gzip.py [-h] [--fast | --best | -d] [file ...]
A simple command line interface for the gzip module: act like gzip, but do not delete the input file.
positional arguments:
file
options:
-h, --help show this help message and exit
--fast compress faster
--best compress better
-d, --decompress act like gunzip instead of gzip
壓縮檔案:
python -m gzip test.txt
# 會生成一個 test.txt.gz 檔案
解壓檔案(-d 引數用來解壓):
python -m gzip -d test.txt.gz
# 會解壓出 test.txt 檔案
4. base64:編碼解碼檔案
當我們臨時要用base64
來編碼或解碼字串的時候,可以用這個模組。
python -m base64 -h
usage: D:\miniconda3\envs\databook\Lib\base64.py [-h|-d|-e|-u|-t] [file|-]
-h: print this help message and exit
-d, -u: decode
-e: encode (default)
-t: encode and decode string 'Aladdin:open sesame'
用base64
編碼一個字串:
echo "abcdefg" | python -m base64
YWJjZGVmZw0K
解碼base64字串:用上面編碼後的base64
來還原。
echo "YWJjZGVmZw0K" | python -m base64 -d
abcdefg
5. json.tool:更好的顯示json結構
這個工具對於經常使用命令列的人來說,非常有用。
從命令列訪問某些API介面的時候,返回的json資料往往是壓縮在一行,很難閱讀。
json.tool
模組的引數很多,但是一般大部分情況下是不需要設定的,
使用引數的預設值就可以了:
python -m json.tool -h
usage: python -m json.tool [-h] [--sort-keys] [--no-ensure-ascii] [--json-lines]
[--indent INDENT | --tab | --no-indent | --compact]
[infile] [outfile]
A simple command line interface for json module to validate and pretty-print JSON objects.
positional arguments:
infile a JSON file to be validated or pretty-printed
outfile write the output of infile to outfile
options:
-h, --help show this help message and exit
--sort-keys sort the output of dictionaries alphabetically by key
--no-ensure-ascii disable escaping of non-ASCII characters
--json-lines parse input using the JSON Lines format. Use with --no-indent or --compact to produce valid
JSON Lines output.
--indent INDENT separate items with newlines and use this number of spaces for indentation
--tab separate items with newlines and use tabs for indentation
--no-indent separate items with spaces rather than newlines
--compact suppress all whitespace separation (most compact)
比如下面的json
字串:
echo '{"code":0,"message":"success""data":[{"name":"harry"},{"name":"joe"}]}' | python -m json.tool
{
"code": 0,
"message": "success",
"data": [
{
"name": "harry"
},
{
"name": "joe"
}
]
}
6. calendar:日曆資訊
calendar
這個模組相當於是個命令列下的日曆。
可以指定某一年的日曆(預設是當前年的):
python -m calendar 2022
也可以指定某一年某個月的日曆:
python -m calendar 2023 10
這個命令還可以把日曆轉換成HTML格式匯出,具體可以看它的help資訊。
7. ast:顯示程式碼的抽象語法數
這個ast
模組就強大了,它可以將原始的python
程式碼轉換為抽象語法樹。
基於抽象語法樹,可以做一些底層的程式碼分析,程式碼生成,甚至轉換成其它語言的程式碼等等。
ast
模組的引數不多,一般用預設引數即可:
python -m ast -h
usage: python -m ast [-h] [-m {exec,single,eval,func_type}] [--no-type-comments] [-a] [-i INDENT] [infile]
positional arguments:
infile the file to parse; defaults to stdin
options:
-h, --help show this help message and exit
-m {exec,single,eval,func_type}, --mode {exec,single,eval,func_type}
specify what kind of code must be parsed
--no-type-comments don't add information about type comments
-a, --include-attributes
include attributes such as line numbers and column offsets
-i INDENT, --indent INDENT
indentation of nodes (number of spaces)
下面構造一個python
程式碼檔案(main.py
),內容比較簡單,就是一個累加的功能。
# -*- coding: utf-8 -*-
def sum(start, end):
sum = 0
for i in range(start, end + 1):
sum += i
print("1+2+...+10 = {}".format(sum))
if __name__ == "__main__":
sum(1, 10)
轉換之後的抽象語法樹為:
python -m ast main.py
Module(
body=[
FunctionDef(
name='sum',
args=arguments(
posonlyargs=[],
args=[
arg(arg='start'),
arg(arg='end')],
...省略...
body=[
Assign(
targets=[
Name(id='sum', ctx=Store())],
value=Constant(value=0)),
For(
target=Name(id='i', ctx=Store()),
...省略...
orelse=[]),
Expr(
value=Call(
...省略...
keywords=[]))],
decorator_list=[]),
If(
test=Compare(
...省略...
orelse=[])],
type_ignores=[])
轉換後的內容比較長,中間我省略一些內容。
對完整的內容感興趣,可以自己試試轉換一個python
程式碼檔案。