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