CasperJs不能完全从PHP执行

时间:2016-10-01 06:02:56

标签: javascript php linux stdout casperjs

示例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命令的最后一行(正确)结果 有什么想法吗?

1 个答案:

答案 0 :(得分:2)

查看exec的文档:

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

  

string exec(string $ command [,array&amp; $ output [,int&amp; $ 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