2015-02-21 2 views
1

Я пытаюсь вызвать скрипт python из CasperJS и захватить вывод из python.Как вызвать скрипт python из CasperJS

casp = require('casper').create({ 
    verbose: true, 
    logLevel: 'debug' 
}); 

casp.start().then(function() { 
    var cp = require('child_process'); 
    cp.execFile('/usr/bin/python','test.py', {},function(_,stdout,stderr){ 
     console.log(stdout); 
     console.log(stderr); 
    }); 
}); 

casp.run(); 

test.py только print "hello world" атм для тестирования, но этот сценарий, когда я запускаю его просто выходит без запуска питона.

Если я заменил test.py arg -version, например.

cp.execFile('/usr/bin/python','--version', {},function(_,stdout,stderr){

Тогда я получаю информацию о версии правильно. Я думаю, что это должна быть проблема с тем, как аргументы передаются в execFile, но не уверен, что я должен делать.

+0

Вы обновили путь в casperjs.cmd или где-то еще? –

+0

nope, не внесли никаких изменений в casperjs, fresh download – skeletalmonkey

ответ

1

Проблема в том, что вы выходите преждевременно. Пустой casper.run() означает, что он выйдет, как только будут выполнены все шаги casper. Модуль child_process не является модулем CasperJS (он предоставляется PhantomJS), поэтому он не может знать, что он выполняется.

Вы можете либо просто использовать

casp.run(function(){}); 

предотвратить Выходящий. Но тогда вам, вероятно, придется убить процесс CasperJS.

Лучше всего было бы установить переменную, когда выполнение будет закончено и по-прежнему только тогда:

casp.start().then(function() { 
    var finished = false; 
    var cp = require('child_process'); 
    cp.execFile('/usr/bin/python','test.py', {},function(_,stdout,stderr){ 
    console.log(stdout); 
    console.log(stderr); 
    finished = true; 
    }); 
    this.waitFor(function check(){ 
    return finished; 
    }, function then(){ 
    // can stay empty 
    }); 
}).run(); 

Если вы хотите передать несколько аргументов к внешней программе, вы должны использовать массив в качестве второго аргумента до execFile