【问题标题】:Why Linux command dmidecode when use in exec returns nothing?为什么在 exec 中使用时 Linux 命令 dmidecode 什么也不返回?
【发布时间】:2016-08-26 20:41:54
【问题描述】:

如果在终端运行命令“dmidecode -s processor-frequency”,会显示信息:2000 MHz。 但是当我运行 PHP 脚本时:

exec("dmidecode -s processor-frequency", $output);
print_r($output);

它什么也不返回。

更新:
示例中的命令返回 1 行。在这种情况下,我们可以使用 exec
也许代替 dmidecode 来使用这个应用程序路径? 但是路径是什么?

【问题讨论】:

    标签: php linux terminal debian exec


    【解决方案1】:

    exec$output 仅包含结果的最后一行:

    命令结果的最后一行。如果您需要执行命令并将命令中的所有数据直接传回而不受任何干扰,请使用passthru() 函数。

    如果要捕获完整输出,请使用passthruproc_open

    passthru

    $command = "dmidecode -s processor-frequency";
    passthru($command, $output);
    echo $output;
    

    proc_open

    $command = "dmidecode -s processor-frequency";
    $desc = [ 1 => ['pipe', 'w'], 2 => ['pipe', 'w'] ];
    $proc = proc_open($command, $desc, $pipes);
    
    if (!is_resource($proc)) {
      fprintf(STDERR, "command failed: $command\n");
      exit(1);
    }
    
    if ($output = stream_get_contents($pipes[1])) {
      fprintf(STDOUT, "STDOUT: %s\n", $output);
    }
    
    if ($error = stream_get_contents($pipes[2])) {
      fprintf(STDERR, "STDERR: %s\n", $error);
    }
    
    fclose($pipes[1]);
    fclose($pipes[2]);
    
    proc_close($proc);
    

    【讨论】:

    • @NazarVozniy,好吧,然后命令返回error 127 字符串。如果这不是您所期望的,那么问题应该出在命令本身。我刚刚展示了如何捕获stdoutstderr
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 2016-04-26
    相关资源
    最近更新 更多