【发布时间】:2023-03-28 19:17:01
【问题描述】:
我正在教一门高中计算机科学课程,并且正在尝试针对我的所有学生提交的内容自动执行 JUnit 测试。我正在使用 perl 脚本包装器来克隆学生存储库,最初使用 system("gradle test") 在每个存储库中运行测试。
我发现我需要添加一个超时机制,因为我的一些学生在他们的代码中创建了循环循环,所以我切换到使用 IPC::Cmd 如下:
$cmd = "gradle test";
my ($success, $error, $full_buf,$stdout_buf,$stderr_buf) =
run (command =>$cmd, verbose => 1, timeout => 20);
这在 Mac 上效果很好,但在 Windows 上,我从 gradle 收到以下错误: 无法确定 Stdout 是否为控制台:无法获取句柄文件信息 (errno 1)
我尝试过重定向 stdout 和 stderr,但它对 stdin 失败了... 任何想法将不胜感激。
【问题讨论】:
-
谢谢你的想法——我会试试的。我正在运行 ActivePerl 5.28 - 我忘了把它放在原来的问题中。我能够通过实际为stdin创建一个空文件并将stdout和stderr都重定向到一个文件来破解它来运行,但是我遇到了同样的问题,即超时没有触发......我将尝试IPC::Run ...