【问题标题】:How to write Python bindings for command line applications如何为命令行应用程序编写 Python 绑定
【发布时间】:2023-03-05 07:02:01
【问题描述】:

我有兴趣为我在 Linux 上使用的现有命令行实用程序编写 python 绑定或包装器,以便我可以在我的 python 程序中访问它的功能。有没有人可以指出我的标准方法?

目前,我已经将命令行可执行文件包装在一个 subprocess.Popen 调用中,它可以工作但感觉很脆弱,我想让双方之间的集成更加稳定,以便它可以在某些地方工作除了我自己的电脑!

【问题讨论】:

  • 假设该实用程序跨计算机安装在同一位置,该方法在其他计算机上运行应该没有任何问题。如果不是,那么这是一个超出 Python 绑定范围的问题。

标签: c++ python c binding


【解决方案1】:

如果您必须使用命令行界面,那么 subprocess.Popen 是您最好的选择。请记住,您可以使用 shell=True 让它选择路径变量,您可以使用 os.path.join 来使用依赖于操作系统的路径分隔符等。

但是,如果您的命令行实用程序具有共享库,请查看 ctypes,它允许您直接连接到这些库并直接公开功能。

【讨论】:

    【解决方案2】:

    一种方法是

    1. 重构您的命令行实用程序,以便分离命令行处理并将实际功能公开为共享存档。

    2. 然后您可以使用 cython 公开这些功能。

    3. 在 python 中编写完整的命令行实用程序以利用这些功能。

    但这使得分发变得困难。

    你正在做的仍然是最好的方式。

    【讨论】:

    • 您应该首先检查其他人是否已经为您完成了其中一些步骤 - 特别是第 1 步
    • 不幸的是,命令行实用程序不是我的,它只是我经常使用的一个,并且想在我的应用程序中使用。如果可能的话,我想为 Python 提供一个绑定,但只是不确定如何去做。
    • @Richard J:使用库方法可以更好地创建绑定。 cython、ctypes 等。但是您没有访问权限,那么您将不得不依赖用于外部命令执行的方法 - subprocess.Popen。
    猜你喜欢
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多