2013-05-25 181 views
8

我開始使用Grunt並希望將變量傳遞給我通過exec運行的PhantomJS腳本。我想要做的就是傳遞一個網址給腳本從屏幕捕獲。任何幫助將不勝感激,謝謝!通過exec將變量傳遞給PhantomJS

達倫

咕嚕腳本

exec('phantomjs screenshot.js', 
    function (error, stdout, stderr) { 
     // Handle output 
    } 
); 

screenshot.js

var page = require('webpage').create(); 
page.open('http://google.com', function() { 
    page.render('google.png'); 
    phantom.exit(); 
}); 

回答

17

命令行參數是經由模塊require('system').args(模塊System)訪問。第一個始終是腳本名稱,然後是隨後的參數

此腳本將枚舉所有參數並寫出到控制檯。

var args = require('system').args; 
if (args.length === 1) { 
    console.log('Try to pass some arguments when invoking this script!'); 
} 
else { 
    args.forEach(function(arg, i) { 
     console.log(i + ': ' + arg); 
    }); 
} 

在你的情況,解決的辦法是

咕嚕

exec('phantomjs screenshot.js http://www.google.fr', 
    function (error, stdout, stderr) { 
     // Handle output 
    } 
); 

screenshot.js

var page = require('webpage').create(); 
var address = system.args[1]; 
page.open(address , function() { 
    page.render('google.png'); 
    phantom.exit(); 
}); 
7

這裏是傳遞,並挑選ARGS一個簡單的方法這是適用的。非常靈活且易於維護。


使用像:

phantomjs tests/script.js --test-id=457 --log-dir=somedir/ 

OR

phantomjs tests/script.js --log-dir=somedir/ --test-id=457 

OR

phantomjs tests/script.js --test-id=457 --log-dir=somedir/ 

OR

phantomjs tests/script.js --test-id=457 

腳本:

var system = require('system'); 
// process args 
var args = system.args; 

// these args will be processed 
var argsApplicable = ['--test-id', '--log-dir']; 
// populated with the valid args provided in availableArgs but like argsValid.test_id 
var argsValid = {}; 

if (args.length === 1) { 
    console.log('Try to pass some arguments when invoking this script!'); 
} else { 
    args.forEach(function(arg, i) { 
    // skip first arg which is script name 
    if(i != 0) { 
     var bits = arg.split('='); 
     //console.log(i + ': ' + arg); 
     if(bits.length !=2) { 
     console.log('Arguement has wrong format: '+arg); 
     } 
     if(argsApplicable.indexOf(bits[0]) != -1) { 
     var argVar = bits[0].replace(/\-/g, '_'); 
     argVar = argVar.replace(/__/, ''); 
     argsValid[argVar] = bits[1]; 
     } 
    } 
    }); 
} 
// enable below to test args 
//require('utils').dump(argsValid); 
//phantom.exit();