跳转到主要内容

美丽的异步子进程执行器

项目描述

为什么?

在Python中,我们现在有了异步子进程,允许同时执行多个子进程。这个库的目的是

  • 提供一个符合我语法喜好的可接受的asyncio子进程包装器,

  • 可以实时流式传输stderr和stdout,同时捕获它们,

  • 实时输出必须带前缀,以便在您同时执行多个命令时知道哪一行属于哪个进程,就像使用docker-compose logs一样,

  • 实时使用正则表达式进行输出着色,使其更加易于阅读。

这段代码曾经在不同项目之间复制粘贴,最终独立出来。

演示

https://yourlabs.io/oss/shlax/-/raw/master/demo.png

您可以在本存储库中的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分支中找到它。它已经被提取到两个具有清晰边界的项目中,即sysplanpodplan,这两个项目仍然处于alpha状态,尽管Shlax功能完整且稳定。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

shlax-1.0.1.tar.gz (4.4 kB 查看哈希值)

上传时间

由以下支持