Python: bibliotecas que podem ser usadas como utilitários

A biblioteca padrão da linguagem Python disponibiliza diversos módulos que podem ser utilizados como utilitários de linha de comando:

Servidor de arquivos local (HTTP)

Muito útil quando precisamos disponibilizar arquivos para download para outras pessoas na rede.

$ python -m http.server
Serving HTTP on :: port 8000 (http://[::]:8000/) ...

Se você utilizar ele em conjunto com o utilitário [ngrok](https://ngrok.com) você ainda consegue exportar esse servidor publicamente na Internet.

Formatador de JSON

É comum encontrar arquivos .json sem nenhuma formatação no dia-a-dia e esses arquivos são bem difíceis de serem lidos sem alguma formatação.

A maioria dos editores de texto e utilitários como o jq oferecem essa opção mas em alguns casos eles podem não estar disponível em um lugar onde exista um interpretador Python disponível (ex. em servidores de produção).

$ cat raw.json
{"id": 1234, "person": {"name": "John Doe", "address": {"street": "None Street", "number": "1"}, "birthdate": "1986-01-06"}}

$ cat raw.json | python -m json.tool
{
    "id": 1234,
    "person": {
        "name": "John Doe",
        "address": {
            "street": "None Street",
            "number": "1"
        },
        "birthdate": "1986-01-06"
    }
}

Calendário

Esse é mais simples mas pode acontecer de você verificar uma data no calendário em uma máquina sem o utilitário cal:

$ python -m calendar -h
usage: calendar.py [-h] [-w WIDTH] [-l LINES] [-s SPACING] [-m MONTHS] [-c CSS] [-L LOCALE] [-e ENCODING] [-t {text,html}] [year] [month]

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

base64 uuencode/uudecode

Esse é mais raro, mas... se precisar codificar ou decodificar textos em uuencode ou base64:

base64

$ echo 'encode this text' | python -m base64
ZW5jb2RlIHRoaXMgdGV4dAo=

$ echo 'encode this text' | python -m base64 | python -m base64 -d
encode this text

uuencode/uudecode

$ echo 'encode this text' | python -m uu
begin 666 -
196YC;V1E('1H:7,@=&5X= H

end

$ echo 'encode this text' | python -m uu | python -m uu -d
encode this text

ZIP, tar e gzip

É possível comprimir/descomprimir arquivos no formato ZIP.

ZIP

$ python -m zipfile
usage: zipfile.py [-h] (-l <zipfile> | -e <zipfile> <output_dir> | -c <name> [<file> ...] | -t <zipfile>)
zipfile.py: error: one of the arguments -l/--list -e/--extract -c/--create -t/--test is required

$ python -m zipfile -c example.zip raw.json  # compress raw.json -> example.zip

$ python -m zipfile -l example.zip
File Name                                             Modified             Size
raw.json                                       2022-11-30 10:34:34          125

tar

$ python -m tarfile
usage: tarfile.py [-h] [-v] (-l <tarfile> | -e <tarfile> [<output_dir> ...] | -c <name> [<file> ...] | -t <tarfile>)
tarfile.py: error: one of the arguments -l/--list -e/--extract -c/--create -t/--test is required

$ python -m tarfile -c example.tar raw.json

$ python -m tarfile -l example.tar
raw.json

gzip

$ python -m gzip -h
usage: gzip.py [-h] [--fast | --best | -d] [file [file ...]]

A simple command line interface for the gzip module: act like gzip, but do not delete the input file.

positional arguments:
  file

optional arguments:
  -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 raw.json

$ python -m gzip -d raw.json.gz

$ cat raw.json
{"id": 1234, "person": {"name": "John Doe", "address": {"street": "None Street", "number": "1"}, "birthdate": "1986-01-06"}}

Plataforma

Se você precisar de informações sobre a plataforma em uso pelo Python:

$ python -m platform
macOS-13.0.1-arm64-arm-64bit

... e mais alguns outros

Existem alguns outros comandos dentro da biblioteca padrão do Python mas elas são úteis para programadores dessa linguagem. Se esse artigo tiver pelo menos 5 upvotes eu publico um novo artigo com o restante dos comandos.


Eu vou publicar esse tipo de conteúdo aqui primeiro e posteriormente replicarei ele no meu blog pessoal.

Muito bom! o base64 é bastante útil

Eu vivo usando o json.tool (e o http.server) pra resolver coisinhas rápidas do dia a dia :)