小吴学编程 2024-08-15 11:02 采纳率: 0%
浏览 115
已结题

Error: python: can't open file [Errno 2] No such file or directory,如何解决?(相关搜索:python文件)

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) // 捕获异常并打印
  }
})

img

这是第二段程序,也是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;

img

最后是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))

img

运行后的报错的原因就是

**[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)

img

同时我还注意到,我的data和path都不能正常打印,不管是在util文件中还是在调用util文件中都不能打印出我想要的样子。

  • 写回答

12条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-08-15 11:02
    关注

    以下回复引自免费微信小程序:皆我百晓生。 如问题解决,还请采纳。如仍有疑问,请回复留言或私信博主,以便获得更精准的帮助。

    PYTHON中的OS.PATH.EXISTS()函数是用来检查路径是否存在。如果路径不存在,则会返回NONE,表示没有找到。但是,如果你的目录结构不正确或者你正在使用的是错误版本的PYTHON,那么OS.PATH.EXISTS()可能会抛出NO SUCH FILE OR DIRECTORY错误。

    下面是一些可能的原因和解决方案:

    1. 目录结构问题

      • 检查你的目录结构是否正确,确保所有的文件和子目录都位于正确的位置。
      • 如果目录结构是错误的,你需要重新构建或修改你的目录结构以使其正确。
    2. 操作系统问题

      • 确保你使用的系统支持OSIX(UNIX/LINUX)或WINDOWS NT等平台上的命令行工具。这些工具通常能够打开并读取文件。
      • 对于MAC OS X,你可以尝试安装一个支持OSX命令行环境的包,例如MACOS-XCODE-10.11.4.TAR.GZ
    3. 错误版本的PYTHON

      • 这可能是由于某些特定的PYTHON版本不支持某种功能导致的错误。你可以尝试更新到最新版本的PYTHON来修复此问题。
    4. 权限问题

      • 在执行操作之前,确认你有足够的权限访问目标文件或目录。如果你不知道是否有权限访问某个文件,可以考虑将文件移动到其他位置,然后再次运行脚本。
    5. 网络问题

      • 调整你的网络连接以避免网络延迟和阻塞。
    6. 磁盘空间不足

      • 如果你的程序需要大量的内存,这可能导致NO SUCH FILE OR DIRECTORY错误。
    7. 操作系统安全设置

      • 仔细检查你的操作系统的安全设置,确保没有阻止文件或目录访问的限制。
    8. 使用库问题

      • 检查你使用的库中有没有错误,或者是否有未被加载的库。
    9. 错误消息

      • 如果你遇到的错误消息不是关于文件的错误,而是关于程序本身的问题,那么你可能需要查阅相关的文档或者查看你的代码进行进一步的分析。
    10. 代码优化

      • 通过编写更简洁、更容易理解的代码来提高运行效率。

    如果你仍然无法解决问题,可能需要联系技术支持或寻找在线帮助资源。希望以上信息能对你有所帮助!

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 8月15日
  • 创建了问题 8月15日

悬赏问题

  • ¥15 hexo安装这种情况怎么办
  • ¥100 找hCaptcha图形验证码自动识别解决方案
  • ¥15 启动pycharm出错
  • ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
  • ¥15 matlab自定义损失函数
  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程