Error: python: can't open file [Errno 2] No such file or directory,如何解决?
我今天在完成学校内的一个项目时遇到了困难。首先我是使用了node.js中的childprocess来调用处理python脚本文件,但是却出现了python can't open file这样的错误,这让我很是头大,希望可以得到帮助
主要问题就出现在无法找到python文件,导致程序一直不能跑,而且也调试不了
这是第一段程序
waterQuality.js
D:\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\WuYujie\KQGIS\a\a\taihu\backendt\routes\python\WQPS\waterQuality.js
这是绝对路径
const run = require('./py_util')
// 引入py_util模块
(async () => {
try {
const data= [7,2,4,5,6]
// 定义waterQuality函数,参数为data
const path = "D:\\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\WuYujie\\KQGIS\\a\\a\\taihu\\backendt\\routes\\python\WQPS\\xgboost_model.py"
console.log(path) // 打印路径
console.log(data) // 打印参数
// const safe = await run(data, path)
// 调用run函数,传入data和path参数,并返回结果
// console.log(safe) // 打印结果
} catch (err) {
console.log(err) // 捕获异常并打印
}
})
这是第二段程序,也是node.js中的,是处理与python之间的值传递问题
py_util.js
D:\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\WuYujie\KQGIS\a\a\taihu\backendt\routes\python\WQPS\py_util.js
这是绝对路径
const { spawn } = require('child_process');
// 定义一个run函数,接收两个参数:data和path
function run(data, path) {
// 返回一个Promise对象
return new Promise((resolve, reject) => {
// 打印data
console.log(data);
// 打印path
console.log(path);
// 使用spawn函数创建一个子进程,执行python脚本
const process = spawn('python', [path]);
// 将data转换为json字符串
const jsonString = JSON.stringify(data);
// 定义一个空数组,用于存储标准输出
const out = []
// 将json字符串写入子进程的标准输入
process.stdin.write(jsonString + "\n");
// 结束子进程的标准输入
process.stdin.end();
// 监听子进程的标准输出
process.stdout.on('data', (data) => {
// 将输出数据添加到out数组中
out.push(data.toString())
});
// 定义一个空数组,用于存储标准错误
const err = [];
// 监听子进程的标准错误
process.stderr.on('data', (data) => {
// 将错误数据添加到err数组中
err.push(data.toString());
});
// 监听子进程的退出事件
process.on("exit", (code, signal) => {
// 打印子进程的退出状态
console.log(`"exit":${code}(${signal})`);
// 如果子进程退出状态不为0,抛出错误
if (code !== 0) {
reject(new Error(err.join('\n')));
return;
}
try {
// 将标准输出解析为json对象,并调用resolve函数
resolve(JSON.parse(out[0]));
} catch (e) {
// 如果解析失败,抛出错误
reject(e);
}
})
});
}
module.exports = run;
最后是python的代码
xgboost_model.py
D:\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\WuYujie\KQGIS\a\a\taihu\backendt\routes\python\WQPS\xgboost_model.py
这是绝对路径
import json
import sys
import joblib
from sklearn.preprocessing import StandardScaler
def model_predict(X_test):
scaler = StandardScaler()
X_test = scaler.fit_transform(X_test)
model_xgb = joblib.load('xgboost.pkl')
# 进行预测
pred_xgb = model_xgb.predict(X_test) + 1
return pred_xgb
if __name__ == '__main__':
input_string = sys.stdin.read()
smooth_path = model_predict(json.loads(input_string))
print(json.dumps(smooth_path))
运行后的报错的原因就是
**[AsyncFunction (anonymous)]
undefined**
"exit":2(null)
D:\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\WuYujie\KQGIS\a\a\taihu\backendt\routes\python\WQPS\py_util.js:39
reject(new Error(err.join('\n')));
^
**
Error: python: can't open file 'D:\\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\\WuYujie\\KQGIS\\a\\a\\taihu\\backendt\\routes\\python\\WQPS\\undefined': [Errno 2] No such file or directory**
at ChildProcess.<anonymous> (D:\aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\WuYujie\KQGIS\a\a\taihu\backendt\routes\python\WQPS\py_util.js:39:24)
at ChildProcess.emit (node:events:519:28)
at ChildProcess._handle.onexit (node:internal/child_process:294:12)
同时我还注意到,我的data和path都不能正常打印,不管是在util文件中还是在调用util文件中都不能打印出我想要的样子。