说我想测试我的c ++代码,但我不想手工完成。我意识到我可以编写一个可以为我测试代码的python脚本。所以我想测试这个c ++代码,例如:
#include <iostream>
#include <string>
using namespace std;
int main() {
string line;
cin >> line;
cout << line << endl;
}
这是我试图测试这个c ++代码的python脚本:
import subprocess as sb
sb.call("g++ main.cpp", shell=True)
sb.call("./a.out", shell=True)
sb.call("chocolate", shell=True)
这会创建a.out
可执行文件,但它不允许我运行我的程序。我怎样才能做到这一点?或者我能做些什么更好的事情?
答案 0 :(得分:1)
测试可能会变得复杂,但至少可以使用subprocess.Popen
对象来管理程序的输入和输出。这是一个极简主义的测试套件
import subprocess as sb
import threading
def timeout():
print('timeout')
exit(3)
sb.check_call("g++ main.cpp", shell=True)
t = threading.Timer(10, timeout)
proc = sb.Popen("./a.out", shell=True, stdin=sb.PIPE, stdout=sb.PIPE,
stderr=sb.PIPE)
out, err = proc.communicate('hello\n')
t.cancel()
assert proc.returncode == 0
assert out == 'hello\n'
assert err == ''
sb.check_call("chocolate", shell=True)