在posix fork/exec模型之上提供流程执行工具的包。
executed的Python项目详细描述
目的
execute在posix之上提供一个进程执行工具 fork/exec模型。它包含类似于标准的功能 subprocess包,但背后有一个更直观和用户友好的 接口。该软件包的设计与 子流程。一些功能,例如异步进程 根本不提供执行。管道的执行模型 另一方面,将一个程序的输出作为输入传递给另一个程序是 以非常自然和有效的方式表达。同样,处理 环境变量更加简单和安全。
用法
execute包提供了execute函数。这个 原语以同步方式启动进程(即等待它 完成)。
>>> from deso.execute import execute >>> execute("/bin/echo", "-n", "hello") b''
可以控制从哪个流读取数据。默认情况下, 报告标准错误的所有内容(看到的空字节对象)。 而标准输出不被读取。这种行为的原因是 每当程序失败时(即退出非零状态), 引发异常,此异常包含打印到的数据 标准误差。相反,“大多数”程序不按标准编写 因此,默认情况下不会捕获此数据。
当然,用户可以更改此默认值。
>>> execute("/bin/echo", "-n", "hello", stdout=b"", stderr=None) b'hello'
在这里,我们读取标准输出,并将其附加到空字节 缓冲区,同时忽略标准错误上的任何数据。它也是 可以通过提供文件描述符流到文件中。
>>> execute("/bin/echo", "hi", stdout=sys.stderr.fileno(), stderr=None) hi
我们将echo调用的输出直接重定向到标准 错误(这将导致它立即显示)。注意 execute根据其工作的抽象级别,不 支持python的类文件对象:文件描述符必须是 数值。
不仅可以读取输出字符串,提供输入 同样可能。
>>> execute("/bin/tr", "e", "a", stdin=b"hello", stdout=b"", stderr=None) b'hallo'
execute函数还接受一个描述 创建新进程的环境。默认情况下, 父进程的整个环境被继承。然而,它是 可以选择性地提供变量子集或指定新的 一个。
>>> env = {"VAR": "42"} >>> execute("/bin/sh", "-c", "echo ${VAR}", env=env, stdout=b"", stderr=None) b'42\n'
管道
execute为另一个执行原语a提供本机支持 管道。该行为类似于同名的unix原语 从提供的进程列表中输出一个进程 作为下一个的输入。
可以通过pipeline函数访问管道。一个 从包的意义上讲,管道只是命令及其 参数。命令和参数组合为 字符串,管道是字符串列表的列表。
>>> pipeline([ ... ["/bin/echo", "-n", "hello"], ... ["/bin/tr", "e", "a"], ... ], stdout=b"", stderr=None ... ) b'hallo'
弹簧
execute原生支持的最后一个执行原语如下 称为springs。spring是一系列产生数据的源 数据是按顺序累积的。弹簧可以看作 第一个元素特殊的管道,它可以包括 向其余进程提供数据的多个进程。
>>> spring([ ... [["/bin/echo", "hallo"], ["/bin/echo", "axacuta"]], ... ["/bin/tr", "a", "e"] ... ], stdout=b"", stderr=None ... ) b'hello\nexecute\n'
因为它们在第一阶段生产的性质 管道springs不支持stdin关键字参数。 但是,其余接受的参数与^{tt1}相似$ 以及pipeline函数。
安装
为了使用execute包 cleanuppython模块 (包含在存储库的兼容和测试版本中)需要 可由python访问(通常通过将其安装在目录中 列在PYTHONPATH中,或者调整后者以指向它)。这个 对于execute包 本身。
如果使用Gentoo Linux,则 ebuild可用 可直接使用。
支架
该模块用python 3进行了测试。没有工作要确保 与Python2兼容。