2013-03-27 6 views
23

कंसोल करने के बजाय फ़ाइल को लिखें, फ़ैंटॉमजेएस से, मैं कंसोल के बजाय लॉग पर कैसे लिखूं?फ़ैंटॉमजेएस/जावास्क्रिप्ट:

उदाहरण https://github.com/ariya/phantomjs/wiki/Examples में, यह हमेशा (लोगों में मैं पर ध्यान दिया है) का कहना है की तरह कुछ:

console.log('some stuff I wrote'); 

यह बहुत उपयोगी नहीं है।

+0

आप आप के रूप में एचटीएमएल FileSystem API का उपयोग कर की कोशिश की सामान्य ब्राउज़र में होगा? – Valentin

उत्तर

13

तो मैं यह पता लगा:

>phantomjs.exe file_to_run.js > my_log.txt 
+11

यह काम करता है, लेकिन यह जावास्क्रिप्ट त्रुटियों और अन्य phantomjs त्रुटियों जैसे फ़ाइल में संभावित अवांछित सामग्री भी लिखने जा रहा है। आप अरुण के जवाब से बेहतर हो गए हैं ताकि आप * बिल्कुल * जो लिखा हो उसे नियंत्रित कर सकें। – zoltar

+5

जो phantomjs का उपयोग कर फ़ाइल में नहीं लिखता है। यह सिर्फ मानक स्टडआउट रीडायरेक्शन है, और इसलिए सवाल का जवाब नहीं है। – oligofren

+1

हालांकि console.log संदेशों के त्वरित और गंदे देखने के लिए अच्छा है। –

41

निम्नलिखित phantomjs द्वारा सीधे फ़ाइल में सामग्री लिख सकते हैं:

var fs = require('fs'); 
    try { 
    fs.write("/home/username/sampleFileName.txt", "Message to be written to the file", 'w'); 
    } catch(e) { 
     console.log(e); 
    } 
    phantom.exit(); 

user984003 द्वारा जवाब में आदेश विफल रहता है जब वहाँ कुछ चेतावनी है या अपवाद हुआ। और कभी-कभी हमारी विशिष्ट आवश्यकताओं में नहीं आती है क्योंकि कुछ कोडबेस में मुझे हमेशा निम्न संदेश मिल रहा है जो उस फ़ाइल में भी लॉग ऑन होगा।

Refused to display document because display forbidden by X-Frame-Options. 
9

आप मूल console.log समारोह ओवरराइड कर सकते हैं, इस पर एक नज़र डालें:

Object.defineProperty(console, "toFile", { 
    get : function() { 
     return console.__file__; 
    }, 
    set : function(val) { 
     if (!console.__file__ && val) { 
      console.__log__ = console.log; 
      console.log = function() { 
       var fs = require('fs'); 
       var msg = ''; 
       for (var i = 0; i < arguments.length; i++) { 
        msg += ((i === 0) ? '' : ' ') + arguments[i]; 
       } 
       if (msg) { 
        fs.write(console.__file__, msg + '\r\n', 'a'); 
       } 
      }; 
     } 
     else if (console.__file__ && !val) { 
      console.log = console.__log__; 
     } 
     console.__file__ = val; 
    } 
}); 

तो फिर तुम यह कर सकते हैं:

console.log('this will go to console'); 
console.toFile = 'test.txt'; 
console.log('this will go to the test.txt file'); 
console.toFile = ''; 
console.log('this will again go to the console'); 
+0

यह बहुत अच्छा है क्योंकि इससे न केवल phantom.js आउटपुट को फ़ाइल में रखा जाएगा, बल्कि अन्य सभी console.log प्रविष्टियां भी होंगी, जिससे परीक्षण स्वयं को डीबग करना संभव हो जाएगा। एक जोड़ा होगा (अभी भी) लाइन कंसोल जोड़कर कंसोल पर आउटपुट होगा .__ लॉग __। लागू करें (कंसोल, तर्क); 'fs.write() 'के बाद' सामान्य कंसोल आउटपुट को सामान्य रूप से संसाधित करने की इजाजत देता है सीआई धावक। – Gyuri

+0

एक और बात: 'fs.write' लाइन आज ' fs.writeFileSync (console .__ file__, msg + '\ r \ n', {ध्वज: 'ए'}) है; ' – Gyuri