我有一个节点脚本:
//start.js
var spawn = require('child_process').spawn,
py = spawn('python', ['compute_input.py']),
data = [1,2,3,4,5,6,7,8,9],
dataString = '';
py.stdout.on('data', function(data){
dataString += data.toString();
});
py.stdout.on('end', function(){
console.log('Sum of numbers=',dataString);
});
py.stdin.write(JSON.stringify(data));
py.stdin.end();
和一个python脚本:
## compute_input.py
import sys, json, numpy as np
#Read data from stdin
def read_in():
lines = sys.stdin.readlines()
#Since our input would only be having one line, parse our JSON data from that
return json.loads(lines[0])
def main():
#get our data as an array from read_in()
lines = read_in()
#create a numpy array
np_lines = np.array(lines)
#use numpys sum method to find sum of all elements in the array
lines_sum = np.sum(np_lines)
#return the sum to the output stream
print lines_sum
#start process
if __name__ == '__main__':
main()
这两个脚本位于文件夹my_folder /
中如果我在my_folder中并运行命令node start.js
,我得到Sum of number=45
,脚本正在运行。
如果我在文件夹外并运行命令node my_folder/start.js
,我得到Sum of number=
,脚本无效。
为什么??
答案 0 :(得分:2)
最明显的原因是:您正在使用python脚本的相对路径,因此它会在当前工作目录中查找。如果从同一目录执行node.js脚本,则会找到python脚本,如果从其他任何地方执行它(不会发生包含compute_input.py文件xD),则找不到python脚本和python脚本呼叫失败。
使用绝对路径而不是你应该没问题(如何从node.js脚本获取绝对路径作为练习)