本文整理汇总了C++中OperatingSystem::execute方法的典型用法代码示例。如果您正苦于以下问题:C++ OperatingSystem::execute方法的具体用法?C++ OperatingSystem::execute怎么用?C++ OperatingSystem::execute使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OperatingSystem
的用法示例。
在下文中一共展示了OperatingSystem::execute方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: executeOnTestCase
Verdict executeOnTestCase(string testCaseName) {
string testCaseInputFilename = generator->getTestCasesDir() + "/" + testCaseName + ".in";
os->limitExecutionTime(generator->getTimeLimit());
os->limitExecutionMemory(generator->getMemoryLimit());
ExecutionResult result = os->execute(testCaseName + "-submission-evaluation", submissionCommand, testCaseInputFilename, "_submission.out", "_error.out");
os->limitExecutionTime(0);
os->limitExecutionMemory(0);
if (result.exitStatus == 0) {
return Verdict::unknown();
}
vector<Failure> failures;
if (result.exitStatus & (1<<7)) {
int signal = WTERMSIG(result.exitStatus);
if (signal == SIGXCPU) {
return Verdict::timeLimitExceeded();
}
failures.push_back(Failure("Execution of submission failed:", 0));
failures.push_back(Failure(string(strsignal(signal)), 1));
} else {
failures.push_back(Failure("Execution of submission failed:", 0));
failures.push_back(Failure("Exit code: " + Util::toString(result.exitStatus), 1));
failures.push_back(Failure("Standard error: " + string(istreambuf_iterator<char>(*result.errorStream), istreambuf_iterator<char>()), 1));
}
return Verdict::runtimeError(failures);
}
示例2: scoreOnTestCase
Verdict scoreOnTestCase(string testCaseName) {
string testCaseOutputFilename = generator->getTestCasesDir() + "/" + testCaseName + ".out";
string diffCommand = "diff --unchanged-line-format=' %.2dn %L' --old-line-format='(expected) [line %.2dn] %L' --new-line-format='(received) [line %.2dn] %L' " + testCaseOutputFilename + " _submission.out | head -n 10";
ExecutionResult result = os->execute(testCaseName + "-submission-scoring", diffCommand, "", "_diff.out", "");
string briefDiffCommand = "diff --brief _submission.out " + testCaseOutputFilename;
ExecutionResult briefResult = os->execute(testCaseName + "-submission-scoring-brief", briefDiffCommand, "", "", "");
if (briefResult.exitStatus == 0) {
return Verdict::accepted();
} else {
string diff = string(istreambuf_iterator<char>(*result.outputStream), istreambuf_iterator<char>());
return Verdict::wrongAnswer({
Failure("Diff:\n" + diff, 0)
});
}
}
示例3: evaluate
EvaluationResult evaluate(
const string& inputFilename,
const string& outputFilename,
const EvaluatorConfig& config) {
ExecutionRequestBuilder request = ExecutionRequestBuilder()
.setCommand(config.solutionCommand())
.setInputFilename(inputFilename)
.setOutputFilename(outputFilename)
.setErrorFilename("_error.out");
if (config.timeLimit()) {
request.setTimeLimit(config.timeLimit().value());
}
if (config.memoryLimit()) {
request.setMemoryLimit(config.memoryLimit().value());
}
ExecutionResult executionResult = os_->execute(request.build());
return createResult(executionResult);
}