gpt4 book ai didi

python - 调用可执行文件并在 python 中获取输出的最佳方法

转载 作者:太空宇宙 更新时间:2023-11-04 06:05:47 25 4
gpt4 key购买 nike

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

#include <iostream>

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

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

此文件已制作成exe。现在在 python 中它被调用如下:

import subprocess
import sys

sys.path.append('C:\Foo\Bar')

output = subprocess.Popen("hello_world.exe", stdout=subprocess.PIPE)

print output.stdout.read()

所以这对于调用可执行文件并从标准输出返回输出来说效果很好。问题是,是否有任何可行的方法来执行此操作以返回可能很大的数组?据我了解,这基本上就像返回和读取文本文件一样,这会很慢!虽然我知道 SWIG 或 Cython 是使用 C++ 扩展 python 的选项,但我会发现每个功能的单独可执行文件更有条理和模块化!

TLDR:您能否以合理的速度将大型数组从可执行文件返回到 Python?还是使用 Cython/SWIG/ctypes 进行扩展是唯一的出路?

最佳答案

您有两个选择。

  1. subprocess.check_output 或类似的将整个程序输出作为字符串返回
  2. subprocess.popen 并增量读取。

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

cython/swig 等对减少内存占用没有任何作用。如果这是内存限制,那么您很可能想使用 python 并增量读/写到磁盘。 Python 在传递内存方面非常高效(即它不会执行 117 次内存复制,除非您告诉它这样做)。

关于python - 调用可执行文件并在 python 中获取输出的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22179698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com