如何在Windows上捕获Perl输出(Strawberry Perl)

无论我做什么,输出都会打印到命令窗口而不是被捕获。 我在Windows上使用了Strawberry Perl,并试图捕获ffprobe的输出以进行一些批量转换。

在任何情况下,该命令都能正常工作,但我无法捕捉它。 输出进入命令窗口,返回值似乎是一个空字符串。

$output = `ffprobe.exe "$file"`; # nope

$output = qx/ffprobe.exe "$file"/; # nope

$return = system("ffprobe.exe "$file" > output.txt") # nope, and $return is 0

如果我打开一个命令窗口并像这样运行它:

perl myscript.pl > output.txt

output.txt包含脚本自身打印的内容(就像我在"print 'command output starts here:';它将包含该内容),但没有任何程序输出。

由于我一直在Linux上这样做,它一定是Windows的怪癖,我只是无法弄清楚什么。


更新,解决

事实证明,输出被发送到STDERR。 我能够用IPC :: Run3捕获它。 没有别的工作,所以我想我打电话给IPC :: Run3我的解决方案在Windows上的这个问题。 如果有人遇到同样的问题,我会在这里留下这篇文章。

use IPC::Run3;
my ($stdout, $stderr);
$run = run3($command, undef, $stdout, $stderr); # backslashes are important here
say "output was $stderr"; # works

您可以简单地将STDERR重定向到STDOUT

$output = `ffprobe.exe "$file" 2>&1`
链接地址: http://www.djcxy.com/p/47207.html

上一篇: How to capture Perl output on Windows (Strawberry perl)

下一篇: Need to change shebang for Strawberry Perl?