2012-06-29 12 views
16

Recentemente stavo testando l'esecuzione di phantomJS da python come argomento della riga di comando, non ho ancora avuto accesso ad esso ma ho visto degli esempi. Poiché PhantomJS viene eseguito dalla riga di comando, questo sembra possibile. Il risultato che PhantomJS avrebbe sputato sarebbe andato dritto in una variabile.È possibile eseguire PhantomJS da node.js come argomento della riga di comando

Prima di percorrere quel percorso, rendere questo lavoro in node.js sarebbe in realtà più utile per me e mi ha fatto riflettere, posso solo usare il nodo per eseguire PhantomJS mentre un programma viene eseguito da riga di comando e archivio i dati risultano che PhantomJS normalmente sputerebbe in una variabile?

Preferisco non utilizzare phantomjs-node perché sembra che stia usando troppi trucchi.

Il motivo di tutto questo è di essere in grado di eseguire PhantomJS contemporaneamente a un'altra azione eseguita dal programma e utilizzare i dati risultanti per registrare altre informazioni.

In poche parole, è possibile eseguire roba da riga di comando di sistema in python, posso fare lo stesso in node.js?

Saluti :)

Edit: ho capito che il nodo e phantom utilizzano diversi ambienti js, che è cool perché voglio solo correre fantasma come il suo proprio processo e catturare tutti i dati di output in una variabile node.js (i dati saranno un array di una coppia, una stringa e un punto mobile.) Non voglio 'guidare' con il fantasma, costruirò i file javascript caricati su ciò che voglio. Tutto quello che voglio è l'output fantasma. :)

+1

La maggior parte delle persone sembrano essere utilizzando [ 'child_process.spawn'] (http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options) per raggiungere questo obiettivo. 'child_process' è un modulo node.js standard stabile ora, forse non era nel momento in cui hai chiesto - node.js si sposta abbastanza rapidamente. – hippietrail

risposta

14

Suppongo che si può fare un semplice script per Node.js a correre; in quello script lo script phantomjs verrà eseguito come processo figlio. È possibile visualizzare l'esempio di lavoro (ei collegamenti per alcuni documenti) in this answer. Suppongo che this discussion potrebbe essere utile anche per te.

+0

Sto esaminando i due collegamenti e sembra che rispondano direttamente alla mia domanda. Saluti :) – Joseph

+0

Per quelli troppo pigri per fare clic, uno dei link menziona https://github.com/sgentle/phantomjs-node che è di interesse. – MarkHu

18

Da 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

In alternativa alla risposta di Donald Derek, è possibile utilizzare la funzione spawn. Vi permetterà di leggere l'output del processo figlio non appena viene prodotto piuttosto che l'output che viene memorizzato nel buffer e restituito a tutti voi in una volta.

Si può leggere di più su di esso here.

Un esempio dal 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

come si eseguirà, diciamo un server ExpressJS locale e si genera un sottoprocesso per fantoccio, Casper, ecc.? Come se andassi al prompt dei comandi ed eseguissi il mio server.js che ha il mio express server e lo avvii, allora come si fa a richiamare lo spawn del processo figlio dopo aver avviato quel server Express iniziale? – PositiveGuy

Problemi correlati