16

我最近打算测试从 python 运行 phantomJS 作为命令行参数,我还没有考虑到它,但已经看到了例子。因为 PhantomJS 是从命令行运行的,所以这似乎是可能的。PhantomJS 吐出的结果会直接进入一个变量。

在我走这条路之前,在 node.js 中进行这项工作实际上对我来说更有用,这让我开始思考,我可以只使用节点来运行 PhantomJS,因为程序从命令行运行并存储数据结果PhantomJS 通常会吐出一个变量?

我宁愿不使用phantomjs-node因为它似乎使用了太多技巧。

所有这一切的原因是能够在程序执行另一个操作的同时运行 PhantomJS,并将其记录的结果数据用于其他一些东西。

简单地说,你可以在 python 中运行系统命令行的东西,我可以在 node.js 中做同样的事情吗?

干杯:)

编辑:我知道 node 和 phantom 使用不同的 js 环境,这很酷,因为我只想将 phantom 作为自己的进程运行并将所有输出数据捕获到 node.js 变量中(数据将是一对数组,字符串和浮点数。)我不想用幻像“驱动”,我会制作加载的javascript文件来做我想做的事。我想要的只是幻象输出。:)

4

3 回答 3

19

来自 NPM:https ://npmjs.org/package/phantomjs

var path = require('path')
var childProcess = require('child_process')
var phantomjs = require('phantomjs')
var binPath = phantomjs.path

var childArgs = [
  path.join(__dirname, 'phantomjs-script.js'),
  'some other argument (passed to phantomjs script)'
]

childProcess.execFile(binPath, childArgs, function(err, stdout, stderr) {
  // handle results
})
于 2013-12-09T18:48:47.753 回答
14

我想你可以为 Node.js 编写一个简单的脚本来运行;在该脚本中,phantomjs脚本将作为子进程运行。您可以在这个答案中看到工作示例(以及一些文档的链接)。我想这个讨论可能对你也有帮助。

于 2012-06-29T10:51:43.543 回答
5

作为唐纳德德里克的答案的替代方案,您可以使用该spawn功能。它将允许您在子进程的输出生成后立即读取它,而不是将输出缓冲并立即返回给您。

你可以在这里阅读更多关于它的信息。

文档中的一个示例。

var spawn = require('child_process').spawn,
    ls    = spawn('ls', ['-lh', '/usr']);

ls.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});

ls.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});

ls.on('close', function (code) {
  console.log('child process exited with code ' + code);
});
于 2014-04-21T14:51:52.570 回答