繁体   English   中英

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

[英]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

虽然可以通过文件 I/O 从 C++ 输入和 output,但我宁愿让 C++ 程序保持不变。

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

您可以使用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"
python_program.py | cpp_program

在命令行上将 python_program.py 的标准cpp_program提供给python_program.py的标准输入。

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

您可以通过.txt 将其与您的矩阵进行通信,然后在 Python 上阅读它,2 个程序不能使用相同的 memory。

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

您将需要使用 pythons subprocess进程模块 ( https://docs.python.org/2/library/subprocess.html ) 来启动编译的 C++ 应用程序并发送变量并使用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 )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM