perl - 如何抑制或重定向到系统命令的变量输出

标签 perl unit-testing stderr

例如,我正在尝试执行系统命令

 system('git clone .....' );
    if ($?) {
        croak('Error while cloning git repository');
    }

这里我检查结果是否成功,但是如何不从系统命令输出错误,例如在我的例子中,我可以得到类似的东西

Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

来自执行的命令。
我需要将此错误放入变量中并抑制它(不要将其打印到终端)
然后检查此错误消息。
或者至少只是抑制它。
我需要按以下方式测试这样的子程序

dies_ok { MyModule::sub_uses_system_command() } 'Died :(';

有可能得到这样的结果吗?
提前致谢。

最佳答案

system只返回被执行程序的退出状态,如果你想获得标准输出你可以使用 qx/command/或反引号执行命令:

my $result = `git clone [...] 2>&1`

您应该注意执行命令的 qx/command/ 和反引号形式只返回 STDOUT,因此如果您想要捕获 STDERR,您需要在命令中将 STDERR 重定向到 STDOUT。

关于perl - 如何抑制或重定向到系统命令的变量输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31841215/

相关文章:

perl - 我可以用 Perl 编写 DSL 吗?

perl - 如何通过模式匹配提取单词?

perl - 如何编写测试文件夹是否可读/可写的测试

Perl:我如何将列表传递给脚本?

javascript - 使用 Jasmine/Node : Uncaught type error "Cannot set property of ' mock' undefined 测试 Angular

Python单元测试突然退出

ios - OCMock:返回与通过参数获取相同的值

c - 防止 popen() 在 stderr 上显示错误

ruby - 在 Popen 中合并 stdout 和 stderr

python - 为什么 `sys.stderr` 和 `sys.stdout` 在 shell 的末尾放置一个数字,而不是在模块中 - python