在我的 python 软件中使用编译程序作为输入

Use a compiled program as input inside my python software

我见过不同的软件使用编译程序作为 "module";一个例子是使用 aircrack 套件的 wifite。

同样,我需要在我的 python 程序中实现 tshark,但不必通过源代码来实现(主要是因为我希望软件是模块化的,并且让 tshark 成为一个简单的依赖)。

最好的方法是什么?我会避免对程序进行简单调用,因为我觉得它不是很 pythonic.

为了您的目的,您可以使用 tshark 的现有包装器之一,例如 KimiNewt/pyshark

在其他情况下,您可能需要将工具重新编译为库,然后提供绑定以便在 Python 中使用。 documentation 中有更多相关信息。

在一般意义上,标准 UNIX 程序提供的通用 API 包括:

  • 启动该程序的参数向量(C 字符串数组,由 shell 生成或直接传递给 subprocess 模块)。
  • 当该进程启动时,文件描述符作为 FD 0、1 和 2(stdin、stdout 和 stderr)传递(可以使用其他文件描述符,但只有这三个是标准的一部分 API)。
  • 该程序在启动时继承的环境变量集。
  • 各种其他继承的进程状态,例如程序的当前工作目录。

传统上,UNIX 程序通过这些方式相互通信——从 stdin 读取输入(除非在命令行中另有指定)、写入 stdout、记录到 stderr 等。

有些程序可能会提供库接口或基于套接字的接口,但这些只能根据具体情况提供

如果您正在尝试与用 C 编写的提供库接口的软件进行交互,请参阅the ctypes standard-library module