Skip to main content

Harness the full power of Python in your shell scripts and on the command line.

What is pyl?

pyl is a command line tool that let’s you write terse but readable shell one-liners using Python. It does this by introducing a few powerful syntax extensions, described below.

Why?

Python has a super extensive standard library, making it the ultimate shell-scripting toolbox. The problem is that, while very concise compared to other languages, running Python snippets from within shell scripts is quite clunky. Consider the following code that base64-encodes each line of input:

$ ls | python -c $'import base64, sys\nfor l in sys.stdin: print(base64.b64encode(l.encode()).decode())'
TElDRU5TRQo=
UkVBRE1FLnJzdAo=
cHlwcm9qZWN0LnRvbWwK
c3JjCg==

The biggest problem with inline Python is whitespace: Python requires newlines and indentation, and it’s not convenient to include those in strings on the command line.

With pyl, the above command becomes:

$ ls | pyl 'for l in sys::stdin: { base64::b64encode(l.encode()).decode() }'
TElDRU5TRQo=
UkVBRE1FLnJzdAo=
cHlwcm9qZWN0LnRvbWwK
c3JjCg==

The Solution

pyl introduces a number of syntax extensions that, together, make it easy to write readable shell one-lines that take full advantage of everything Python has to offer:

Braces

Curly braces that appear immediately after a colon become indentation.

Example:

for i in range(3): { for j in range(4): { print(i * j); } }

is equivalent to

for i in range(3):
    for j in range(4):
        print(i * j)
Line splitting at ;

Lines are split at semicolons.

In normal Python, statements like if and for need to appear on their own line. with pyl you can just use a semicolon:

Example:

import sys; for arg in sys.argv: { print(arg); }

is equivalent to

import sys
for arg in sys.argv:
    print(arg)
Implicit print

If a block (either top-level or indented) ends without a semicolon, the last line is automatically printed (unless the block ends in another block).

In fact, the whole line is passed as-is to print, so you can pass keyword arguments like sep.

Example:

for i in range(10): { i, end='.' }

is equivalent to

for i in range(10):
    print(i, end='.')
Inline-import

The :: operator can be used to access members of modules without explicitly importing them.

Example:

urllib.parse::quote('hello world')

is equivalent to

print(__import__('urllib.parse').parse.quote('hello world'))
Environment variables

Environment variables can be accessed with $NAME.

Example:

$HOME

is equivalent to

print(__import__('os').environ['HOME'])
Command line arguments

Command line arguments can be accessed with $INDEX where INDEX is a number.

Example:

$1

is equivalent to

print(__import__('sys').argv[1])

Metadata

Release files for python-pyl 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for python-pyl 0.1.0
File Size Uploaded
python_pyl-0.1.0.tar.gz 5.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for python-pyl 0.1.0
File Interpreter ABI Platform
python_pyl-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 11.0 kB

Release files / python_pyl-0.1.0.tar.gz

Download URL python_pyl-0.1.0.tar.gz
Size 5.5 kB
Tags Source
SHA-256 checksum
How to use checksums
9c34e493a049c4df5457e9918fbd403f4ee8f3880409cd4cd38156695d4b8990
BLAKE2b-256 checksum
How to use checksums
ac12debb1fdc9de9227992c08e70fb31ef3e9fbe1a98944eb7a6957d9f48e263
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 7, 2025.

Transparency log

Release files / python_pyl-0.1.0-py3-none-any.whl

Download URL python_pyl-0.1.0-py3-none-any.whl
Size 5.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
80e19cb05b7043e4d692439397a496c43ee2f62cf0601150c82bdf26c936bfb4
BLAKE2b-256 checksum
How to use checksums
ea9dc3037b32411e29a384d630bdd0c3d03711cf76408858fef08777fcca27e8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.9

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Apr 7, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page