最近看到 zx,就是那个用 js 写脚本的封装。用上手感觉是不错,但觉得 js 的语法糖不够甜,特别是 Array 的处理。于是乎就照着它的哲学移植到了 Python 上,用法差别不大,就照 asyncio 那套走就行。借用 zx 的示例:
#!/usr/bin/env shx
await $"cat setup.py | grep name"
branch = (await $("git branch --show-current", capture=True)).stdout
await $f"dep deploy --branch={branch}"
await gather(
$"sleep 1; echo 1",
$"sleep 2; echo 2",
$"sleep 3; echo 3",
)
name = "foo bar"
await $f"mkdir /tmp/{Q(name)}"
$ 符号是用 tokenize 替换的,比较中规中矩吧,大概。(嗯因为我之前试过用 forbiddenfruit 之流的,总有些复杂的情况会 segfault) 然后这也是 Python 里的非法字符,还自带显眼的红色语法高亮呢(逃
目前项目没有任何依赖,请自带 httpx、requests、colorama、termcolor 什么的。
匆匆忙忙写的,可能有些 bug 。不过我自己已经用上了,爽就完事儿了。