CasperJs 没有完全从 PHP 开始执行

CasperJs doesn't execute completely from PHP

CasperJs 测试示例:

casper.test.begin('Hello, Test!', 1, function(test) {
    test.assert(true);
    test.done();
});

Linux命令执行结果:

# casperjs test /bin/casper-test.js
Test file: /bin/casper-test.js
# Hello, Test!
PASS Subject is strictly true
PASS Hello, Test! (1 test)
PASS 1 test executed in 0.026s, 1 passed, 0 failed, 0 dubious, 0 skipped.

PHP的结果:

<?php
echo exec('casperjs test /path/to/casper-test.js');
?>
[37;42;1mPASS 1 test executed in 0.024s, 1 passed, 0 failed, 0 dubious, 0 skipped. [0m

如您所见,它仅显示 Linux 命令(正确)结果的最后一行。
有什么想法吗?

查看 exec 的文档:

http://php.net/manual/en/function.exec.php

string exec ( string $command [, array &$output [, int &$return_var ]] )

要捕获所有输出,您应该可以这样做:

exec('casperjs test /path/to/casper-test.js 2>&1', $output, $return_var);
var_dump($output);
var_dump($return_var);

2>&1 附加到您的命令将重定向 STDERRSTDOUT 并将其捕获到 $output 变量中。

此外,我注意到输出似乎试图将其着色以在 shell 上输出,这就是 [37;42; 字符串的含义。根据文档,您可以在命令中添加 --no-colors 以禁用彩色输出:

casperjs test --no-colors  /path/to/casper-test.js 2>&1