我正在尝试从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中传递参数的问题,但不确定我应该做什么。
答案 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
的第二个参数