2012-06-29 15 views
16

के रूप में node.js से PhantomJS को चलाने के लिए संभव है, मैं हाल ही में एक कमांडलाइन तर्क के रूप में पाइथन से चल रहे phantomJS का परीक्षण करने जा रहा था, मुझे अभी तक यह नहीं मिला है लेकिन उदाहरण देख चुके हैं। क्योंकि फ़ैंटॉमजेएस कमांड लाइन से चलाया जाता है, ऐसा लगता है कि यह संभव है। नतीजतन कि फैंटॉमजेएस थूक जाएगा, सीधे एक चर में जाएगा।क्या यह कमांड लाइन तर्क

इससे पहले कि मैं उस रास्ते से नीचे जाऊं, यह काम नोड.जेएस में वास्तव में मेरे लिए अधिक उपयोगी होगा और मुझे यह सोचने में मदद मिलेगी, क्या मैं सिर्फ फैंटॉमजेएस चलाने के लिए नोड करने के लिए उपयोग कर सकता हूं क्योंकि प्रोग्राम कमांडलाइन और स्टोर से चलाया जाता है डेटा परिणाम यह है कि फैंटॉमजेएस सामान्य रूप से एक चर में थूक जाएगा?

मैं phantomjs-node का उपयोग नहीं करता क्योंकि यह बहुत सारी चाल का उपयोग कर रहा है।

इसका कारण यह है कि यह एक ही समय में फैंटॉमजेएस चलाने में सक्षम होना चाहिए क्योंकि प्रोग्राम एक और कार्रवाई करता है और इसके परिणामस्वरूप डेटा को किसी अन्य सामान के लिए रिकॉर्ड किया जाता है।

बस शब्दों में कहें, आप पाइथन में सिस्टम कमांड लाइन सामान चला सकते हैं, क्या मैं node.js में ऐसा कर सकता हूं?

चीयर्स :)

संपादित करें: मैं समझता हूँ कि नोड और प्रेत अलग js वातावरण का उपयोग करें, कि अच्छा है क्योंकि मैं सिर्फ अपने आप ही प्रक्रिया के रूप में प्रेत चलाने के लिए और (एक Node.js चर में सब आउटपुट डेटा को पकड़ने के लिए चाहते हैं डेटा एक जोड़ी, स्ट्रिंग और फ्लोटिंग पॉइंट की सरणी होगी।) मैं प्रेत के साथ 'ड्राइव' नहीं करना चाहता, मैं लोड की गई जावास्क्रिप्ट फ़ाइलों को जो भी चाहता हूं उसे तैयार कर दूंगा। मैं चाहता हूं कि प्रेत आउटपुट हो। :)

+1

ज्यादातर लोग [ 'child_process.spawn'] (http://nodejs.org/api/child_process.html#child_process_child_process_spawn_command_args_options) का उपयोग किया जाना है इस लक्ष्य को हासिल करने लगते हैं। 'child_process' अब एक स्थिर मानक node.js मॉड्यूल है, शायद यह उस समय नहीं था जब आपने पूछा - node.js काफी तेज़ी से चलता है। – hippietrail

उत्तर

14

मुझे लगता है कि आप चलाने के लिए Node.js के लिए एक साधारण स्क्रिप्ट बना सकते हैं; उस स्क्रिप्ट में phantomjs स्क्रिप्ट एक बाल प्रक्रिया के रूप में चलाया जाएगा। आप काम कर रहे उदाहरण (और कुछ दस्तावेज के लिए लिंक) देख सकते हैं in this answer। मुझे लगता है कि this discussion आपके लिए भी सहायक हो सकता है।

+0

मैं दो लिंक पर जा रहा हूं और ऐसा लगता है कि वे सीधे मेरे प्रश्न को संबोधित कर रहे हैं। चीयर्स :) – Joseph

+0

उन लोगों के लिए आलसी क्लिक करने के लिए, लिंक में से एक https://github.com/sgentle/phantomjs-node का उल्लेख करता है जो ब्याज की है। – MarkHu

18

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

डोनाल्ड डेरेक जवाब के लिए एक विकल्प के रूप में, आप spawn फ़ंक्शन का उपयोग कर सकते हैं। इससे आपको आउटपुट के उत्पादन के बजाए उत्पाद प्रक्रिया के उत्पादन को पढ़ने की अनुमति मिल जाएगी और आउटपुट को एक बार में वापस कर दिया जाएगा।

आप इसके बारे में अधिक पढ़ सकते हैं here

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

आप कैसे चलेंगे एक स्थानीय एक्सप्रेसजेएस सर्वर कहें और प्रेत, कैस्पर इत्यादि के लिए एक उप प्रक्रिया स्पॉन करें? जैसे कि मैं कमांड प्रॉम्प्ट पर जाता हूं और अपना server.js चलाता हूं जिसमें मेरा एक्सप्रेस सर्वर है और इसे शुरू होता है, तो प्रारंभिक एक्सप्रेस सर्वर शुरू करने के बाद आप बच्चे की प्रक्रिया के स्पॉन्गिंग का आह्वान कैसे करते हैं? – PositiveGuy

संबंधित मुद्दे