2012-06-29 18 views
16

Hace poco estuve probando la ejecución de phantomJS de python como un argumento de línea de comandos, todavía no lo he podido encontrar pero he visto ejemplos. Debido a que PhantomJS se ejecuta desde la línea de comandos, esto parece ser posible. El resultado que PhantomJS escupiría iría directamente a una variable.¿Es posible ejecutar PhantomJS desde node.js como un argumento de línea de comandos?

Antes de seguir por ese camino, hacer que esto funcione en node.js en realidad sería más útil para mí y me hizo pensar, ¿puedo usarlo para ejecutar PhantomJS como un programa se ejecuta desde la línea de comandos y la tienda? el resultado de datos que PhantomJS normalmente escupiría en una variable?

Preferiría no utilizar phantomjs-node porque parece estar usando demasiados trucos.

El motivo de todo esto es poder ejecutar PhantomJS al mismo tiempo que otra acción que el programa lleva a cabo y utilizar los datos resultantes para algunas otras cosas.

En pocas palabras, puede ejecutar cosas de línea de comandos del sistema en python, ¿puedo hacer lo mismo en node.js?

Saludos :)

Editar: Yo entiendo que el nodo y el fantasma utilizan diferentes entornos js, eso es genial, porque sólo quiero correr fantasma como su propio proceso y coger todo lo que los datos de salida en una variable Node.js (los datos serán una matriz de un par, cadena y punto flotante.) No quiero 'manejar' con fantasma, crearé los archivos javascript cargados todo lo que quiera. Todo lo que quiero es salida fantasma. :)

+1

La mayoría de la gente parece estar usando [ 'child_process.spawn'] (http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options) para lograrlo. 'child_process' es un módulo node.js estándar estable ahora, tal vez no fue en el momento en que lo solicitó - node.js se mueve bastante rápido. – hippietrail

Respuesta

14

Supongo que puede ejecutar un script simple para Node.js; en ese script, el script phantomjs se ejecutará como un proceso secundario. Puede ver el ejemplo de trabajo (y enlaces para cierta documentación) in this answer. Supongo que this discussion podría ser útil para usted también.

+0

Repaso los dos enlaces y parece que están abordando directamente mi pregunta. Cheers :) – Joseph

+0

Para aquellos demasiado perezosos para hacer clic, uno de los enlaces menciona https://github.com/sgentle/phantomjs-node que es de interés. – MarkHu

18

De 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 
}) 
5

Como alternativa a la respuesta de Donald Derek, puede utilizar la función spawn. Le permitirá leer el resultado del proceso secundario tan pronto como se produzca en lugar de la salida que se está almacenando en el búfer y devolverse a todos a la vez.

Puede leer más sobre esto here.

Un ejemplo de the documentation.

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); 
}); 
+1

cómo funcionaría, digamos un servidor ExpressJS local Y genere un subproceso para fantasma, Casper, etc.? Como si voy al símbolo del sistema y ejecuto mi servidor.js que tiene mi servidor express y lo inicio, entonces, ¿cómo invocas el inicio del proceso hijo después de que iniciaste ese servidor express inicial? – PositiveGuy

Cuestiones relacionadas