2012-06-29 20 views
16

olarak çalıştırmak mümkün mü? Son zamanlarda phantomJS'yi bir komut satırı argümanı olarak çalışan phantomJS'yi test etmeyi deneyimleyecektim, henüz buna henüz sahip olmadım ama örnekleri gördüm. PhantomJS komut satırından çalıştırıldığı için bu mümkün görünüyor. PhantomJS'in tükürdüğü sonuç, bir değişkene doğrudan gider.PhantomJS'yi node.js'den komut satırı argümanı

Bu yoldan gitmeden önce, bu çalışmayı node.js içinde yapmak aslında benim için daha yararlı olur ve düşünmemi sağladı, sadece bir programın komut satırı ve depodan çalıştırılmasıyla PhantomJS'yi çalıştırmak için kullanabilir miyim? veri sonucu PhantomJS normalde bir değişkene tükürdü?

phantomjs-node kullanmamayı tercih ederim, çünkü çok fazla numara kullanıyor gibi görünüyor.

Tüm bunların nedeni, PhantomJS'yi programın başka bir eylemle aynı anda çalıştırabilmesi ve sonuçta elde edilen verileri başka bir şey için kaydetmesidir.

Basitçe söylemek gerekirse, sistem komut satırı öğelerini python'da çalıştırabilirsiniz, node.js'de aynı şeyi yapabilir miyim?

Alkış :)

Düzenleme: Ben sadece kendi süreç olarak hayaleti çalıştırın ve (bir node.js değişken içine tüm bu çıkış verilerini yakalamak istiyorum çünkü düğüm ve fantom farklı js ortamlarını kullanmak anlıyoruz, sorun değil veri, bir çift, dize ve kayan nokta bir dizi olacaktır.) Ben hayalet ile 'sürücü' istemiyorum, ne istediğimi yapmak için yüklenen javascript dosyaları zanaat olacak. Tek istediğim fantom çıkışı. :)

+1

Çoğu insan bunu başarmak için [ 'child_process.spawn'] (http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options) kullanıyor görünüyor. 'child_process' artık kararlı bir standart node.js modülüdür, belki de istediğiniz saatte değildi - node.js oldukça hızlı hareket ediyor. – hippietrail

cevap

14

Node.js'nin çalışması için basit bir betik oluşturabileceğinizi varsayalım; Bu komut dosyasında phantomjs komut dosyası alt işlem olarak çalıştırılacaktır. Çalışma örneğini (ve bazı belgeler için bağlantılar) in this answer görebilirsiniz. Sanırım, this discussion da sizin için yararlı olabilir. NPM itibaren

+0

İki bağlantı üzerinden gidiyorum ve doğrudan sorumu ele alıyor gibi görünüyor. Cheers :) – Joseph

+0

Tıklamak için çok tembel olanlar için, bağlantılardan biri ilgi çekici olan https://github.com/sgentle/phantomjs-node. – MarkHu

18

: Donald Derek cevap alternatif olarak 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

, sen spawn işlevini kullanabilirsiniz. Çocuk işleminin çıktısını, çıktısı alınmış olan çıktıdan çok üretilip, bir kerede size geri döndürülür.

Daha fazla bilgiyi here adresinden edinebilirsiniz.

the documentation'dan bir örnek.

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

nasıl çalışırsınız yerel bir ExpressJS sunucusu söyler VE phantom, Casper, vb için bir alt süreç doğurur? Komut istemine gidip ekspres sunucuma sahip olan ve başlattığım server.js'yi çalıştırırsam, o ilk ekspres sunucuyu başlattıktan sonra alt işlemin yumurtlamasını nasıl başlatırsınız? – PositiveGuy