web-dev-qa-db-ja.com

node.jsからコマンドライン引数としてPhantomJSを実行することは可能ですか?

最近、コマンドライン引数としてpythonからphantomJSを実行することをテストしようとしていましたが、まだ理解できていませんが、例を見てきました。PhantomJSはコマンドラインから実行されるため、次のようになります。 PhantomJSが吐き出す結果は、変数に直接入ります。

その道を進む前に、node.jsでこれを機能させることは実際には私にとってより便利であり、私は考えました。プログラムがコマンドラインから実行され、データ結果を保存するときに、ノードを使用してPhantomJSを実行できますか? PhantomJSは通常、変数に吐き出されますか?

トリックが多すぎるように見えるので、 phantomjs-node は使用しません。

このすべての理由は、プログラムが実行する別のアクションと同時にPhantomJSを実行し、記録された結果のデータを他の目的に使用できるようにするためです。

簡単に言えば、Pythonでシステムコマンドラインを実行できますが、node.jsでも同じことができますか?

乾杯:)

編集:ノードとファントムが異なるjs環境を使用していることを理解しています。ファントムを独自のプロセスとして実行し、すべての出力データをnode.js変数にキャッチしたいのでクールです(データはペアの配列、文字列になります)浮動小数点。)ファントムで「ドライブ」したくないので、ロードされたjavascriptファイルを作成して必要な処理を実行します。私が欲しいのはファントム出力だけです。 :)

16
Joseph

Node.jsを実行するための簡単なスクリプトを作成できると思います。そのスクリプトでは、phantomjsスクリプトが子プロセスとして実行されます。実例(およびいくつかのドキュメントへのリンク)を見ることができます この回答ではこの議論 もあなたに役立つかもしれないと思います。

14
raina77ow

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
})
19
Donald Derek

Donald Derekの回答の代わりに、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);
});
5
zbr