php system() 没有return 最后一行输出

php system() does not return the last line of output

我有一个 运行s youtube-dl 的脚本。我 运行 通过 php 文件使用 system() 像这样:

$output = system(getenv("YOUTUBEDL_EXE") . " --no-color -f \"mp4\" \"5uR4JucaZ5I\" -o \"/tmp/%(id)s-%(format)s.%(ext)s\"",  $retVal);

视频的 ID 不正确(故意的),当我在我的终端上 运行 时得到的输出 (linux) 是这样的:

[youtube] 5uR4JucaZ5I: Downloading webpage
[youtube] 5uR4JucaZ5I: Downloading video info webpage
ERROR: 5uR4JucaZ5I: YouTube said: This video does not exist.

但是,当我 运行 它通过系统时,$output 变量 returns 第二行,而不是最后一行

[youtube] 5uR4JucaZ5I: Downloading video info webpage

我仍然得到正确的退出代码(它没有成功完成)但是无法得到带有 ERROR: 标记的最后一行所以我可以解析错误。不幸的是,这是获得错误的唯一方法,因为它只对任何错误类型 returns 1

(youtube-dl写在python中,其可执行文件以:

开头
#!/usr/bin/env python

和一个拉链 header (PK ....) )

非常欢迎任何有关如何获取最后一行的指示!

谢谢

最后一行是一个错误,被写入 STDERR 而不是 STDOUT。如果你想得到 PHP 的错误,你需要将 STDERR 重定向到 STDOUT,你可以通过在命令末尾添加 2>&1 来做到这一点。