美丽的异步子进程执行器
项目描述
为什么?
在Python中,我们现在有了异步子进程,允许同时执行多个子进程。这个库的目的是
提供一个符合我语法喜好的可接受的asyncio子进程包装器,
可以实时流式传输stderr和stdout,同时捕获它们,
实时输出必须带前缀,以便在您同时执行多个命令时知道哪一行属于哪个进程,就像使用docker-compose logs一样,
实时使用正则表达式进行输出着色,使其更加易于阅读。
这段代码曾经在不同项目之间复制粘贴,最终独立出来。
演示
您可以在本存储库中的demo.py找到演示脚本。
用法
基本用法
基本示例,这将同时流式传输输出并捕获它
from shlax import Subprocess
proc = await Subprocess('echo hi').wait()
print(proc.rc, proc.out, proc.err, proc.out_raw, proc.err_raw)
较长
如果您想在其他地方启动命令并等待完成,则可以显式调用start()和wait()中的任何一个,或两者都调用
proc = Subprocess('echo hi')
await proc.start() # start the process
await proc.wait() # wait for completion
进程别名
请注意,shlax将别名Proc定义为Subprocess,因此这也有效
from shlax import Proc
proc = await Proc('echo hi').wait()
安静
要禁用实时输出流,请使用quiet参数
proc = await Subprocess('echo hi', quiet=True).wait()
前缀
使用前缀,您可以在并行命令的实时输出中,同时知道哪个输出属于哪个进程
proc0 = Subprocess('find /', prefix='first')
proc1 = Subprocess('find /', prefix='second')
await asyncio.gather(proc0.wait(), proc1.wait())
着色和输出修补
您可以使用着色或使用正则表达式修补实时输出,请注意,它将逐行应用
import sys
regexps = {
'^(.*).py$': '{cyan}\\1',
}
await asyncio.gather(*[
Subprocess(
f'find {path}',
regexps=regexps,
).wait()
for path in sys.path
])
其余部分在哪里?
Shlax曾经是一个更加雄心勃勃的poc-project的名字,您仍然可以在本存储库的OLD分支中找到它。它已经被提取到两个具有清晰边界的项目中,即sysplan和podplan,这两个项目仍然处于alpha状态,尽管Shlax功能完整且稳定。
项目详情
关闭
shlax-1.0.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | b809062977f430b392b322327b67246fb9f619ba68b4f2d27a1bdf8f488a34a4 |
|
MD5 | c201549445c0d6e9ad3885965746b733 |
|
BLAKE2b-256 | a03dd66d31bba2a0721919c833e6522a2d94b1120668173dcc7f4f7c5738bd45 |