【问题标题】:Calling executable from C++ and getting return value从 C++ 调用可执行文件并获取返回值
【发布时间】:2026-02-02 02:10:01
【问题描述】:

我想从另一个脚本调用已编译的 C++ 可执行文件,并且还需要可执行文件返回的值。使用 system() 不会返回函数输出,并且无法找到任何其他替代方法。这是否可能无需写入文件并从中解析?

我正在使用 2 个不同的库,并想使用另一个库中的一个。所以,我想通过创建可执行文件并从另一个库的脚本中调用它来做到这一点。我还尝试通过在 make 期间添加另一个库的头文件目录来将两者一起编译,但收到此错误 ImportError: /.conda/envs/myenv/lib/python3.6/site-packages/hnswlib.cpython-36m-x86_64-linux-gnu.so: undefined symbol: gzopen64,我无法理解如何修复。

【问题讨论】:

  • 查看popen 是否对您可用。 Here's a good example
  • 您可以使用 fork() 创建一个子进程,然后使用 exec 系列调用可执行 bin。 pipe() 可用于两个进程之间的通信。还要 waitpid() 等待子进程完成并检查返回的状态

标签: c++ linux


【解决方案1】:

您尚未指定您的操作系统,但如果您在 Linux/UNIX 环境中,则可以使用标准 POSIX 函数popen,它启动程序并为您提供程序输入/输出流的文件句柄.你可以在这里找到这个函数的完整文档:https://pubs.opengroup.org/onlinepubs/009695399/functions/popen.html

【讨论】:

  • _popen 在 Windows 上也应该可以工作。
  • @nneonneo 感谢我使用popen 让它工作。