无论我做什么,输出都会打印到命令窗口而不是被捕获。我在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。没有其他工作,所以我想在Windows上调用IPC :: Run3我的解决方案。如果有人遇到同样的问题,我会留下这篇文章。
use IPC::Run3;
my ($stdout, $stderr);
$run = run3($command, undef, \$stdout, \$stderr); # backslashes are important here
say "output was $stderr"; # works