从node.js调用python脚本

时间:2015-03-01 05:38:09

标签: python node.js

我想从node.js

调用python脚本

这是我的脚本:my.py

def printme( str ):
# print str;
return str;
printme("I'm first call to user defined function!");
printme("Again second call to the same function");

我的节点脚本:testpy.js

var PythonShell = require('python-shell');
var pyshell = new PythonShell('my.py');
pyshell.on('message', function(message) {
console.log(message);
});

但是收到错误

events.js:85
throw er; // Unhandled 'error' event
Error: spawn python ENOENT
at exports._errnoException (util.js:746:11)
at Process.ChildProcess._handle.onexit (child_process.js:1046:32)
at child_process.js:1137:20
at process._tickCallback (node.js:355:11)
at Function.Module.runMain (module.js:503:11)
at startup (node.js:129:16)
at node.js:814:3

P.S我已经安装了Python shell

此外,如果我想从node.js执行单个函数到python脚本。我可以这样做吗?帮助

4 个答案:

答案 0 :(得分:1)

你可以简单地写下'my.py'像这样的文件 -

def printme(str):
    return str;

print(printme("I'm first call to user defined function!"));

检查给定的路径是否正确并检查缩进错误。

答案 1 :(得分:1)

您只需使用 let 关键字而不是 const 关键字导入Npm Pythonshell。

let {PythonShell} = require('python-shell')

这对我有用

答案 2 :(得分:0)

您的打印声明(my.py第2行)已被注释掉,因此不会输出任何内容,因此消息事件将永远不会触发。取消注释print语句,Node PythonShell对象将重定向stdout(打印写入)并使用输出触发消息事件。

至于你的错误,看起来在当前目录中找不到python脚本。有关错误代码及其含义,请参阅https://docs.python.org/2/library/errno.html。确保您的脚本位于正确的目录中,或使用os.chdir将您的python shell设置为正确的目录。

答案 3 :(得分:0)

我认为你需要设置python脚本来接受像这样的标准输入 import sys for v in sys.argv[1:]: print v

同样在设置代码时,您需要执行PyhtonShell.send('message'),但我需要查看更多代码,因为我看不到您如何将数据发送到python shell通过Node.js.