头图

在命令行中直接使用Python标准库的模块,最大的好处就是就是不用写代码,就能使用其中的功能,当临时需要一些某些功能的时候,用这种方式会快捷,方便很多。

  1. 命令行中使用模块
    命令行中使用python标准库的模块,一般格式如下:
    bash复制代码python -m <mod-name> <options>

其中,mod-name 是模块的名称;options 是模块的参数。
本篇列举的是我自己在命令行中常用的一些模块,并不是所有可在命令行中可用的模块。其它好用的模块,欢迎大家推荐。

  1. http.server:静态文件服务
    http.server 模块的参数主要有:
    bash复制代码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文件内容:
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>

启动服务,效果如下:
bash复制代码python -m http.server -d ./sample-site

图片

  1. gzip:压缩/解压缩
    gzip模块可用来压缩,解压缩文件。
    bash复制代码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

压缩文件:
bash复制代码python -m gzip test.txt

会生成一个 test.txt.gz 文件

解压文件(-d 参数用来解压):
bash复制代码python -m gzip -d test.txt.gz

会解压出 test.txt 文件

  1. base64:编码解码文件
    当我们临时要用base64来编码或解码字符串的时候,可以用这个模块。
    bash复制代码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编码一个字符串:
bash复制代码echo "abcdefg" | python -m base64

YWJjZGVmZw0K

解码base64字符串:用上面编码后的base64来还原。
bash复制代码echo "YWJjZGVmZw0K" | python -m base64 -d

abcdefg

  1. json.tool:更好的显示json结构
    这个工具对于经常使用命令行的人来说,非常有用。从命令行访问某些API接口的时候,返回的json数据往往是压缩在一行,很难阅读。
    json.tool模块的参数很多,但是一般大部分情况下是不需要设置的,使用参数的默认值就可以了:
    bash复制代码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字符串:
bash复制代码echo '{"code":0,"message":"success""data":[{"name":"harry"},{"name":"joe"}]}' | python -m json.tool

{

"code": 0,
"message": "success",
"data": [
    {
        "name": "harry"
    },
    {
        "name": "joe"
    }
]

}

  1. calendar:日历信息
    calendar这个模块相当于是个命令行下的日历。可以指定某一年的日历(默认是当前年的):
    bash复制代码python -m calendar 2022

图片

也可以指定某一年某个月的日历:
bash复制代码python -m calendar 2023 10

图片

这个命令还可以把日历转换成HTML格式导出,具体可以看它的help信息。

  1. ast:显示代码的抽象语法数
    这个ast模块就强大了,它可以将原始的python代码转换为抽象语法树。基于抽象语法树,可以做一些底层的代码分析,代码生成,甚至转换成其它语言的代码等等。
    ast模块的参数不多,一般用默认参数即可:
    bash复制代码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),内容比较简单,就是一个累加的功能。
python复制代码# -- 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)

转换之后的抽象语法树为:
bash复制代码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代码文件。
转载来源:https://juejin.cn/post/7299346813262528512


运维社
12 声望4 粉丝