通过PHP执行shell命令,并获取有关是否来自stdout和stderr的信息的输出

时间:2019-06-24 04:19:42

标签: php bash shell

我想执行一个shell命令,并将输出放在一个数组中,使得: (1)输出的每一行都是数组中的一个元素 (2)无论是来自stdout还是stderr,这些行都被“标记”

类似的东西:

╔═════════╦══════════════════╗
║ Line No ║ Stdout or stderr ║
╠═════════╬══════════════════╣
║ Line1   ║ Stdout           ║
╠═════════╬══════════════════╣
║ Line2   ║ Stdout           ║
╠═════════╬══════════════════╣
║ Line3   ║ Stderr           ║
╠═════════╬══════════════════╣
║ Line4   ║ Stdout           ║
╚═════════╩══════════════════╝

这是一个表,但是我真正的意思是一个多维数组,其中$ thisarray [0],$ thisarray [1]是行。 我假设执行的shell命令在切换到stderr或stdout之前总是会生成新行。

这样,我将能够看到哪一行属于哪个文件描述符,并能够在上下文中看到它。

在PHP中,是否可以使用shell exec命令或其他方式来做到这一点?

如果PHP无法做到这一点,那么我不介意其他技术。

1 个答案:

答案 0 :(得分:0)

如果您输入带有换行符的字符串输入,并通过以下命令运行它:

{% if messages %}
          {% for message in messages %}
                        <div class="alert temp-alert {% if message.tags %}alert-{% if message.level == DEFAULT_MESSAGE_LEVELS.ERROR %}danger{% else %}{{ message.tags }}{% endif %}{% endif %}" role="alert">{{ message }}</div>
          {% endfor %}
{% endif %}

然后$ arr将使您的数组在$$输出行中包含一项。