我正在尝试使用 exec
从 PHP 脚本调用节点脚本:
$output = exec("/usr/bin/node /home/user/nodescript.js");
节点脚本.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"。不知何故,我在函数内没有收到任何控制台输出。我做错了什么?
首先,你不能直接获取exec命令的输出。您需要像在文档中一样定义第二个参数。
exec("node yourfile.js", $output);
echo implode("'n", $output);
我在执行python脚本时遇到了这个问题。 由于某种原因,最后一行消失了。 尝试将2>&1
添加到脚本中,并将exec
更改为shell_exec
这将返回包含错误输出的字符串。 看看这是否有帮助。
$output = shell_exec("/usr/bin/node /home/user/nodescript.js 2>&1");
我知道2>&1
允许脚本将错误和调试输出传递给标准输出,因为它们会通过错误输出。 我必须这样做来调试我的脚本,最后一行再次出现。
PHP 5.6 与 phpdbg 交互式调试器捆绑在一起。但是,文档 URL 目前指向一个过期的域,所以,是的。
资料来源:https://stackoverflow.com/a/36131176/370786