【发布时间】:2012-06-20 20:10:43
【问题描述】:
如何获得控制台上显示的命令输出?
<?php
ob_start();
system('faxstat -s' , $retval);
$last_line = ob_get_contents();
ob_end_clean();
preg_match('/^32.+\s{9}(.*)/m', $last_line, $job_id);
?>
在控制台中,输出如下:
JID Pri S Owner Number Pages Dials TTS Status
36 127 R www-da 0xxxxxxxx 0:1 0:12
32 127 R www-da 0xxxxxxxx 0:1 0:12
35 127 R www-da 0xxxxxxxx 0:1 0:12
但在 PHP 中,$last_line 的回声是这样的:
JID Pri S Owner Number Pages Dials TTS Status 36 127 R www-da 0xxxxxxxx 0:1 0:12 32 127 R www-da 0xxxxxxxx
0:1 0:12 35 127 R www-da 0xxxxxxxx 0:1 0:12
注意:我不想打印输出,所以不需要<pre> 标签。我想preg_match它。因为它丢失了格式,所以我的正则表达式没用。
【问题讨论】:
-
如果你把它PRE出来或者只是看一下html页面的源代码,它是不是格式不正确?它应该在 HTML 输出中不保留正常的空格,但我会惊讶于它们在内存中丢失了......
-
@MathieuDumoulin 如果我使用
<Pre>进行打印,它看起来确实如此。但它并不完全相同,我的目标不是打印输出。 -
我无法在此处重现“格式丢失”。我只能假设您正在浏览器中查看它将删除格式。
-
是的,只返回最后一行。 php.net/manual/en/function.exec.php 使用 exec(command,$output); $ouput 将变成一个用行填充的数组
-
我会使用
preg_split('/\s+/', $line)来分割空白字符。然后你可以按数字引用每一列。
标签: php formatting system