用python调用可执行文件并获得输出的最佳方法

2024-03-28 20:03:29 发布

您现在位置:Python中文网/ 问答频道 /正文

首先用一个简单的例子来说明情况。首先是编译为可执行文件的源.cpp:

#include <iostream>

using std::cout;
using std::endl;

int main() 
{
    cout << "Hello World!" << endl;
    return 0;
}

此文件已被制成exe文件。现在在python中它被称为:

^{pr2}$

因此,这对于调用可执行文件并从标准输出返回一个输出非常有效。问题是,有没有可行的方法来执行此操作以返回潜在的大数组?据我所知,这基本上就像返回和读取一个文本文件,这将是相当缓慢的!虽然我知道SWIG或Cython是用C++来扩展Python的选项,但我会发现每个功能的独立可执行文件更具组织性和模块化。在

TLDR:你能以合理的速度将大型数组从可执行文件返回到python吗?或者用Cython/SWIG/ctypes扩展是唯一的方法吗?在


Tags: 文件方法可执行文件include情况数组cppcython
1条回答
网友
1楼 · 发布于 2024-03-28 20:03:29

你有两个选择。在

  1. 在subprocess.check_输出或者类似的将以字符串形式返回整个程序输出
  2. 在子流程.popen并逐步阅读。在

在第一个场景中,输出必须适合ram,否则会发生非常糟糕的事情。在第二个场景中,您可以设置缓冲区大小,然后您的子进程应该停止,直到您从缓冲区读取数据,此时它将再次继续。在

cython/swig等不做任何事情来减少内存占用。如果这是内存受限的,那么您很可能希望使用python并增量地读/写磁盘。Python在传递内存方面非常高效(也就是说,除非您告诉它这样做,否则它不会执行至少7个内存拷贝)。在

相关问题 更多 >