如何从CasperJS调用python脚本

时间:2015-02-21 07:38:32

标签: javascript python phantomjs casperjs

我正在尝试从CasperJS中调用python脚本并从python中获取输出。

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" atm用于测试,但是当我运行它时这个脚本只是退出而不运行python。

如果我用--version替换test.py arg,例如

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

然后我正确获取版本信息。我认为它必须是如何在execFile中传递参数的问题,但不确定我应该做什么。

1 个答案:

答案 0 :(得分: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的第二个参数