在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函数。

安装

为了使用executecleanuppython模块 (包含在存储库的兼容和测试版本中)需要 可由python访问(通常通过将其安装在目录中 列在PYTHONPATH中,或者调整后者以指向它)。这个 对于execute包 本身。

如果使用Gentoo Linux,则 ebuild可用 可直接使用。

支架

该模块用python 3进行了测试。没有工作要确保 与Python2兼容。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
if语句Java中if(x(y))中x的结果类型是什么?   java TestNG没有执行套件中的所有测试类   java当使用自定义arrayadapter在listview中单击edittext时,会发生错误   java keytool命令的import和importcert之间有什么区别   java如何在流中使用PartitioningBy来查找高于或低于平均值的值?   java在从另一个Jtable中选择行时显示Jtable中的数据   java使用JOptionPane按钮创建条件状态   安卓“java.lang.UnsatisfiedLinkError:未找到本机方法:”如果删除头文件,可以修复错误?   java如何实现具有泛型关系的多态JPA实体   java当关闭相关(相同)的entityManager时,entityManager以前找到或获取的entites是什么?   运行应用程序时发生java UnsatifiedPendencyException异常   java如何在jfree折线图中添加注释