我有一个包含CentOS的 AWS EC2 实例(至少是我的想法),我按照此链接(How to yum install Node.JS on Amazon Linux)在我的实例上安装了nodejs(第二个答案)。事情是我能够成功安装它甚至能够运行以下命令
node --version
v8.11.1
npm --version
5.6.0
node -e "console.log('Running Node.js ' + process.version)"
Running Node.js v8.11.1
但我有一个python文件,它通过python' s运行节点命令 subprocess module.This下面的python文件
import json
import yaml
import subprocess
def output_filter(json_data, exp):
json_data = json.dumps(json_data)
result = subprocess.check_output(['node', '/home/ec2-user/api-demo/jstest3.js', json_data, exp])
dict = yaml.load(result.decode("utf-8"))
filtered_output = json.dumps(dict)
return json.loads(filtered_output)
以下是我的 jstest3.js 文件
var args = process.argv.slice(2);
//console.log(args[0]);
var jsonata = require("jsonata");
var data = JSON.parse(args[0]);
var expression = jsonata(args[1]);
var result = expression.evaluate(data);
console.log(result);
我基本上使用一个名为jsonata
的nodejs库来做一些JSON解析。我可以在我的本地机器上使用执行这个python文件(我有一个Ubuntu 16.10 x86_64)没有任何问题。但是当我执行时在我的aws instance
中,这是我得到的错误
result = subprocess.check_output(['node', '/home/ec2-user/api-demo/jstest3.js', json_data, exp])
File "/usr/lib64/python3.5/subprocess.py", line 316, in check_output
**kwargs).stdout
File "/usr/lib64/python3.5/subprocess.py", line 383, in run
with Popen(*popenargs, **kwargs) as process:
File "/usr/lib64/python3.5/subprocess.py", line 676, in __init__
restore_signals, start_new_session)
File "/usr/lib64/python3.5/subprocess.py", line 1289, in _execute_child
raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'node'
为什么我得到这个错误,尽管如上所示在我的aws实例中安装了节点?我做错了什么?
答案 0 :(得分:0)
啊!出于某种原因,AWS实例无法跟上我所做的所有安装。所以,一旦我通过访问AWS控制台重新启动实例 - >重启实例,所有错误突然消失,它开始处理我的nodejs请求。