如何使用Python输入C++程序并从中获取输出?

How to use Python to input to and get output from C++ program?

我目前正在尝试自动测试从终端获取输入并将结果输出到终端的 C++ 程序。例如,我的 C++ 文件将执行如下操作:

#include <iostream>

int main() {
    int a, b;
    std::cin >> a >> b;
    std::cout << a + b;
}

我用于测试的 Python 文件如下:

as = [1, 2, 3, 4, 5]
bs = [2, 3, 1, 4, 5]
results = []

for i in range(5):
    # input a[i] and b[i] into the C++ program
    # append answer from C++ program into results

尽管可以通过文件从 C++ 输入和输出 I/O,但我宁愿让 C++ 程序保持原样。

我可以做什么来代替 Python 程序中的注释行?

您可以通过.txt进行交流 用你的矩阵写入 txt 并在 Python 上读取它,2 个程序可以使用相同的内存。

否则使用 Cython 并在 Python 上编写 C++ https://github.com/cythonbook/examples/tree/master/07-wrapping-c/01-wrapping-c-functions-mt-random

python_program.py | cpp_program

在命令行上会将 python_program.py 的标准输出输入到 cpp_program 的标准输入。

这适用于所有可执行文件,无论它们是用什么编程语言编写的。

您将需要使用 pythons subprocess 模块 (https://docs.python.org/2/library/subprocess.html) to start your compiled C++ application and send in your variables and read the output of the subprocess using Popen.communicate() (https://docs.python.org/2/library/subprocess.html#subprocess.Popen.communicate)。

示例代码可能如下所示:

import subprocess
p = subprocess.Popen(["cpp_app", stdin=subprocess.PIPE,stdout=subprocess.PIPE)
out, _ = p.communicate(b"1 2")
print(out, err)

您可以使用 supproccess 从被调用程序获取数据,例如 whois:

import subprocess
proc = subprocess.Popen(['whois', 'google.com'], stdout=subprocess.PIPE)
data = proc.communicate()[0]
print( data )

您可以使用 subprocess.Popen。示例代码:

#include <iostream>

int sum(int a, int b) {
    return a + b;
}


int main ()
{
    int a, b;

    std::cin >> a >> b;
    std::cout << sum(a, b) << std::endl;
    
}
from subprocess import Popen, PIPE

program_path = "/home/user/sum_prog"

p = Popen([program_path], stdout=PIPE, stdin=PIPE)
p.stdin.write(b"1\n")
p.stdin.write(b"2\n")
p.stdin.flush()

result = p.stdout.readline().strip()
assert result == b"3"