Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从CasperJS调用python脚本_Javascript_Python_Phantomjs_Casperjs - Fatal编程技术网

Javascript 如何从CasperJS调用python脚本

Javascript 如何从CasperJS调用python脚本,javascript,python,phantomjs,casperjs,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(_,stdo

我试图从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();
py只是
print“hello world”
atm进行测试,但是当我运行这个脚本时,它只是在不运行python的情况下退出

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

cp.exefile('/usr/bin/python','--version',{},函数(u,stdout,stderr){


然后我正确地获得了版本信息。我认为这一定是execFile中参数传递方式的问题,但不确定我应该做什么。

问题是您过早退出。一个空的
casper.run()
意味着它将在所有
casper
步骤执行后立即退出。子进程模块不是CasperJS模块(由PhantomJS提供),因此它无法知道它正在执行

你可以简单地使用

casp.run(函数(){});
但是你可能需要终止CasperJS进程

更好的方法是在执行完成时设置一个变量,然后才继续:

casp.start().then(function()){
var finished=false;
var cp=需要(“子流程”);
cp.execFile('/usr/bin/python','test.py',{},函数(_,stdout,stderr){
控制台日志(stdout);
控制台日志(stderr);
完成=正确;
});
this.waitFor(函数检查(){
返回完成;
},函数then(){
//你可以空着
});
}).run();

如果要将多个参数传递给外部程序,应使用数组作为第二个参数

是否在casperjs.cmd或其他地方更新路径?否,尚未对casperjs进行任何更改,请重新下载