子进程模块,特使,sarge和pexpect之间的区别?

时间:2012-06-03 18:25:23

标签: python

我正在考虑制作一个需要发送输入并从各种aircrack-ng套件工具中获取输出的程序。我知道几个python模块,如subprocess,envoy,sarge和pexpect,它们将提供必要的功能。任何人都可以建议我应该使用或不使用,特别是因为我是python的新手。

由于

3 个答案:

答案 0 :(得分:13)

作为sarge的维护者,我可以告诉你,它的目标与envoy大致相似(就subprocess的易用性而言)而且(IMO)更多sarge中有关以下内容的功能:

  • 对类似bash的语法的跨平台支持(例如在命令行中使用&&||&
  • 更好地支持捕获subprocess输出流并异步使用它们
  • 更多文档,特别是关于内部和外围问题,如使用子进程的上下文中的线程和分叉
  • 支持防止shell注入攻击

当然是YMMV,但你可以查看the docs,它们相当全面。

答案 1 :(得分:3)

Pexpect的

2015年,pexpect无法在Windows上运行。传闻加上“实验性”支持in the next version,但这已成为很长一段时间的谣言(我没有屏住呼吸)。

使用pexpect编写了许多应用程序(并且喜欢它),我现在很抱歉,因为我喜欢python(它是跨平台)的一件事情对我的应用程序来说并不适用。

如果您计划永远添加Windows支持,请暂时避免使用。

特使

去年活动不多。自2012年以来很少提交(总共12个)。对其未来不太有希望。

在内部,它以与Windows路径不兼容的方式使用shlex(命令必须使用'/'而不是'\'用于目录分隔符)。解决方法(使用pathlib时)是在路径对象上作为命令传递之前调用as_posix()。请参阅this answer

访问内部流(即我想解析输出以获得一些更新滚动条)似乎是可能的,但没有记录。

sarge中的

在开箱即用的Windows上运行,并且有一个expect()方法,它应该提供类似于pexpect的功能(允许我更新滚动条)。最近的活动,但它托管在gitlabbitbucket上(非常令人困惑)。

个人结论

我正在将 pexpect 移动到 sarge 以供将来开发。似乎为pexpect提供了类似的功能集并支持windows。

答案 2 :(得分:2)

subprocess - 是一个标准的库模块,所以它可以在python安装时使用。但它具有难以使用的声誉,因为它的api不直观。

envoy - 是一个包装子进程的第三方模块。它被编写为一个易于使用的替代子进程。特使Kenneth Reitz的作者以他的Python for Humans哲学而闻名。

我不熟悉其他两个。