【问题标题】:What is the best way to run gradle from perl with a timeout on a Windows platform?在 Windows 平台上超时从 perl 运行 gradle 的最佳方法是什么?
【发布时间】: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 失败了... 任何想法将不胜感激。

【问题讨论】:

  • 您可以尝试使用IPC::Run 而不是IPC::Cmd 就像this 问题中的this 问题吗?
  • 谢谢你的想法——我会试试的。我正在运行 ActivePerl 5.28 - 我忘了把它放在原来的问题中。我能够通过实际为stdin创建一个空文件并将stdout和stderr都重定向到一个文件来破解它来运行,但是我遇到了同样的问题,即超时没有触发......我将尝试IPC::Run ...

标签: perl gradle timeout


【解决方案1】:

无法确定 Stdout 是否为控制台

当我将您的 $cmd = "gradle test" 替换为以下 perl 脚本时,我无法重现该错误(Windows 10,Strawberry Perl 版本 5.30.1)。但是,超时没有按预期工作。这是我的简单测试程序:

use strict;
use warnings;
use feature qw(say);
use Data::Dumper;
use IPC::Cmd qw(run);

my $timeout = shift @ARGV;
#my $cmd = ['perl', '-E', "sleep 4; exit 1"];
my $cmd = ['perl', '-E', "sleep 4; say 'stdout_text'; say STDERR 'stderr_text'"];
my ($success, $error, $full_buf,$stdout,$stderr) = 
     run (command =>$cmd, verbose => 1, timeout => $timeout);
say "success = $success" if $success;
say "error = $error" if $error;
print Dumper({ stdout => $stdout, stderr => $stderr});

如果我以 1 的超时时间运行它,我会得到

> perl p.pl 1
Running [perl -E sleep 4; say 'stdout_text'; say STDERR 'stderr_text']...
stderr_text
stdout_text
error = IPC::Cmd::TimeOut: Command 'perl -E sleep 4; say 'stdout_text'; say STDERR 'stderr_text'' aborted by alarm after 1 seconds
$VAR1 = {
          'stdout' => [
                        'stdout_text
'
                      ],
          'stderr' => [
                        'stderr_text',
                        '
'
                      ]
        };

因此,即使它报告在一秒钟后超时,它实际上也会将程序运行到最后。我正在研究这个问题。

【讨论】:

  • 转换为 IPC::Run 做我想做的事!...谢谢!
猜你喜欢
  • 2013-03-31
  • 2010-09-28
  • 2017-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多