如何从 CasperJS 调用 python 脚本
How to call python script from 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 参数,例如
cp.execFile('/usr/bin/python','--version', {},function(_,stdout,stderr){
然后就正确获取到版本信息了。我认为这一定是在 execFile 中如何传递参数的问题,但不确定我应该做什么。
问题是你提前退出了。一个空的 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
的第二个参数
我正在尝试从 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 参数,例如
cp.execFile('/usr/bin/python','--version', {},function(_,stdout,stderr){
然后就正确获取到版本信息了。我认为这一定是在 execFile 中如何传递参数的问题,但不确定我应该做什么。
问题是你提前退出了。一个空的 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