A tool for writing shell scripts in python.
Project description
prey
#!/usr/bin/env prey
async def main():
await _("cat pyproject.toml | grep name")
branch = await _("git branch --show-current")
await _(f"dep deploy --branch={branch}")
await _(
[
"sleep 1; echo 1",
"sleep 2; echo 2",
"sleep 3; echo 3",
]
)
name = "foo bar"
await _(f"mkdir /tmp/${name}")
A tool for writing shell scripts in Python. Inspired by google/zx. This package provides a wrapper around asyncio.subprocess
and escapes arguments.
Install
pip install prey
Documentation
Wrap your scripts in an async function called main
:
async def main():
# script...
It must be called main
as the executable looks for a function calls main and calls it. This is used so commands can be asynchronous.
You can add the shebang at the top of your script:
#!/usr/bin/env prey
and run it like so:
chmod +x ./script.py
./script.py
Or via the prey
executable:
prey ./script.py
When using prey
via the executable or a shebang, all of the functions (_
, colorama
, request
, etc) are available wihtout any imports.
await _("command")
Asychronously executes a given string using the create_subprocess_shell
function from the asyncio.subprocess
module and returns the output.
count = int(await _("ls -1 | wc -l"))
print(f"Files count: {count}")
cd("filepath")
Changes the current working directory.
cd("/tmp")
await _('pwd') # outputs /tmp
colorama package
The colorama package is available without importing inside scripts.
print(f"{colorama.Fore.BLUE}Hello World!")
request package
A wrapper around aiohttp, aiohttp-requests.requests.session.request
, is available without importing inside scripts.
response = await request("get", "http://python.org")
html = await response.text()
Importing from other scripts
It is possible to make use of _
and other functions via explicit imports:
#!/usr/bin/env prey
from prey import _
await _('date')
Passing env variables
os.environ["FOO"] = "bar"
await _('echo $FOO')
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.