我有一个不工作的Perl脚本,我不知道如何开始缩小问题范围.我能做什么?
注意:我正在添加问题,因为我真的想要将非常冗长的答案添加到Stackoverflow.我在其他答案中保持外部链接,它值得在这里.如果你有什么要补充的话,不要害怕编辑我的答案.
是否可以从Perl运行外部进程,捕获其stderr,stdout和进程退出代码?
我似乎能够组合这些,例如使用反引号来获取stdout,使用IPC :: Open3来捕获输出,使用system()来获取退出代码.
你如何一次捕获stderr,stdout和退出代码?
我一直在查看 perl 的一些模块,我发现t在扩展名为.t.
这些脚本可以直接使用perl <test>.t.
我想做一个小框架来测试一个应用程序。我想进行许多简单的测试。然后是一个主脚本,它调用这个测试来一次验证所有内容,但仍然能够单独运行小测试,而无需手动禁用主脚本中的其他测试。
我的问题是我应该怎么做这个电话?正如如何从 Perl 脚本中运行 Perl 脚本中所建议的那样?应该避免这种进程间通信,而是使用模块,但这将无法直接运行测试。
我的猜测是做如下事情。在我需要在 selenium 脚本中提供一些参数的示例中,这是文件夹结构:
??? main_script.pl
??? t
??? 00-Test_1.t
??? 01-Test_2.t
??? 02-Test_3.t
??? 03-Test_4.t
Run Code Online (Sandbox Code Playgroud)
我会这样称呼他们:
??? main_script.pl
??? t
??? 00-Test_1.t
??? 01-Test_2.t
??? 02-Test_3.t
??? 03-Test_4.t
Run Code Online (Sandbox Code Playgroud)
每个测试都会有这样的东西:
system($^X, "./t/00-Test_1.t", "-b $browser", "-s $server", "-d $debug");
my $results = capture($^X, "./t/00-Test_1.t", "-b $browser", "-s $server", "-d $debug";
$log->info("Result is $results");
Run Code Online (Sandbox Code Playgroud)
这是一种正确的方法还是有更适合使用模块的方法?
我有一个运行的脚本,运行后它有一些信息需要传递给下一个要运行的脚本.
Unix/DOS命令是这样的:
perl -x -s param_send.pl
perl -x -s param_receive.plRun Code Online (Sandbox Code Playgroud)
param_send.pl是:
# Send param
my $send_var = "This is a variable in param_send.pl...\n";
$ARGV[0] = $send_var;
print "Argument: $ARGV[0]\n";Run Code Online (Sandbox Code Playgroud)
param_receive.pl是:
# Receive param
my $receive_var = $ARGV[0];
print "Parameter received: $receive_var";Run Code Online (Sandbox Code Playgroud)
但没有任何印刷品.我知道我做错了但是从教程中我无法弄清楚如何将一个参数从一个脚本传递给下一个脚本!
提前谢谢了.