我尝试使用exec
从PHP脚本调用节点脚本:
$output = exec("/usr/bin/node /home/user/nodescript.js");
nodescript.js是:
var Scraper = require('google-images-scraper');
var keywords = process.argv[2];
var scraper = new Scraper({
keyword: keywords,
rlimit: 10, // 10 p second
});
console.log("foo");
scraper.list(10).then(function (res) {
console.log("bar");
console.log(res);
});
setTimeout(function () {
process.exit(1);
}, 20000)
但我收到的是字符串" foo",而不是" bar"。如果我从命令行运行节点脚本,我会得到" foo" &" bar"。不知怎的,我在功能中没有收到任何控制台输出。我做错了什么?
答案 0 :(得分:0)
首先,你无法直接获得exec命令的输出。您需要在文档中定义第二个参数。
exec("node yourfile.js", $output);
echo implode("\n", $output);
答案 1 :(得分:0)
我在执行python脚本时遇到过这个问题。由于某种原因,最后一行消失了。尝试将2>&1
添加到您的脚本中,并将exec
更改为shell_exec
,这将返回包含错误输出的字符串。看看是否有帮助。
$output = shell_exec("/usr/bin/node /home/user/nodescript.js 2>&1");
我知道2>&1
允许脚本将错误和调试输出传递给标准输出,因为它们经历了错误输出。我不得不这样做来调试我的脚本并重新出现最后一行。
答案 2 :(得分:0)
PHP 5.6与phpdbg交互式调试器捆绑在一起。 但是,documentation URL指向过期的域名,此刻,是的,是的。