4

スクリーンショットを作成するために phantomjs プロセスを生成するノード サーバーを作成しようとしています。実行するとgrab.jsスクリプトが正常に動作し、stdoutに書き込むことを確認しました。問題は、プロセスを生成するノード コードが単にハングすることです。パスにphantomjsがあることを確認しました。ここで何が起こっているのか、またはこれをトラブルシューティングする方法を知っている人はいますか?

ページをレンダリングし、データを stdout に書き込む phantomjs コード (grab.js) を次に示します。

var page = require('webpage').create(),
  system = require('system'),
  fs = require('fs');

var url = system.args[1] || 'google.com';

page.viewportSize = {
  width: 1024,
  height: 1200
};

page.open(url, function() {
  var b64 = page.renderBase64('png');
  fs.write('/dev/stdout', b64, 'w');
  phantom.exit();
});

ファントムの進行状況を生成し、結果を出力する (ハングする) ノード コードは次のとおりです。

var http = require('http'),
  exec = require('child_process').exec,
  fs = require('fs');

exec('phantomjs grab.js google.com', function(error, stdout, stderr) {
  console.log(error, stdout, stderr);
});
4

2 に答える 2

1

exec で同様の問題が発生し、代わりに spawn を使用するように切り替えたところ、うまくいきました。この記事によると、子プロセスが巨大なバイナリ データを Node に返すようにする場合は spawn を使用し、子プロセスが単純なステータス メッセージを返すようにする場合は exec を使用します。 h番目

于 2013-01-09T20:03:51.603 に答える