如何在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)