【问题标题】:php system() does not return the last line of outputphp system() 不返回输出的最后一行
【发布时间】:2016-02-01 16:55:09
【问题描述】:

我有一个运行 youtube-dl 的脚本。我使用 system() 通过一个 php 文件运行它,如下所示:

$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 变量返回第二行,而不是最后一行

[youtube] 5uR4JucaZ5I: Downloading video info webpage

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

(youtube-dl 是用 python 编写的,它的可执行文件以 :

开头
#!/usr/bin/env python

和一个 zip 头(PK ....))

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

谢谢

【问题讨论】:

  • 嗯,这是一个错误,我不确定是否会到达STDOUT。可能直接去STDERR
  • 非常感谢!!在我的命令末尾添加了一个 2>&1 来重定向 STDERR,它就像一个魅力!
  • 当然!再次感谢

标签: php python exec system youtube-dl


【解决方案1】:

最后一行是错误并写入STDERR 而不是STDOUT。如果您想在 PHP 中遇到错误,您需要将 STDERR 重定向到 STDOUT,您可以通过在命令末尾添加 2>&1 来实现。

【讨论】:

    猜你喜欢
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    相关资源
    最近更新 更多