2013-03-27 9 views

Odpowiedz

13

Więc zorientowaliśmy się:

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

podczas tego działania będzie również zapisywać potencjalnie niepożądane treści do pliku, takie jak błędy javascripts i inne błędy phantomjs. Lepiej z odpowiedzią Aruna, abyś mógł kontrolować dokładnie to, co zostało napisane. – zoltar

+5

który nie zapisuje do pliku przy użyciu phantomjs. jest to standardowe przekierowanie standardowe, więc nie jest odpowiedzią na to pytanie. – oligofren

+1

dobre dla szybkiego i brudnego przeglądania wiadomości console.log. –

41

Poniższa może napisać zawartość w pliku bezpośrednio 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(); 

Komenda odpowiedź przez user984003 zawiedzie, gdy istnieją pewne ostrzeżenie lub wystąpiły wyjątki. Czasami nie spełnia naszych szczególnych wymagań, ponieważ w niektórych bazach kodu otrzymuję zawsze następujący komunikat, który również będzie zalogowany do tego pliku.

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

Można zastąpić pierwotną funkcję console.log, spójrz na to:

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

Następnie można to zrobić:

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

To jest świetne, ponieważ nie tylko umieści dane wyjściowe pliku phantom.js do pliku, ale także wszystkie inne wpisy console.log, co umożliwi samodzielne debugowanie testów. Jednym dodatkiem byłoby (nadal) wyprowadzenie na konsolę poprzez dodanie linii 'console .__ log __. Apply (console, arguments); 'after' fs.write() 'dzięki czemu normalne wyjście konsoli może być przetworzone przez normalnie CI biegaczy. – Gyuri

+0

Jeszcze jedno: dzisiaj linia 'fs.write' to ' fs.writeFileSync (konsola .__ plik__, msg + '\ r \ n', {flaga: 'a'}); ' – Gyuri