首页 > 解决方案 > 如何在sails.js 应用程序中使用python-shell 访问python 脚本?

问题描述

我想访问一个 python 脚本并传递一个图像,然后等待一个 json 响应。获取图像后,我应该在“上传”功能中执行此操作。

一直在搜索,但找不到带帆的 python-shell。由于sails 是建立在node.js 之上的,所以大多数情况下都有办法。

module.exports = {

fileUpload: function(req, res) {

        res.writeHead(200, { 'content-type': 'text/html' });
        res.end(
            '<form action="http://localhost:1337/postIts/upload" enctype="multipart/form-data" method="post">' +
            '<input type="text" name="title"><br>' +
            '<input type="file" name="uploadFile"><br>' +
            '<input type="submit" value="Upload">' +
            '</form>'
        )
    },
    upload: function(req, res) {
        var uploadFile = req.file('uploadFile')

        uploadFile.upload({
            saveAs: 'image.png'
        }, function onUploadComplete(err, files) {
            if (err)
                return res.serverError(err);
            return res.json({
                message: files.length + ' file(s) uploaded successfully!',
                files: files[0]
            });
        });
    }
};

我想将此上传的图像传递给 python 脚本并等待我将返回给客户端的 json 输出。我没有尝试过任何事情,因为我不确定这样做的正确方法。

它应该与此类似,但我不知道正确的方法。在我的控制器中执行此操作。

应该有一个 import python-shell 某处,也许在 module.export 之前?


var PythonShell = require('python-shell');

var courseid=req.param('courseid');

sails.log.debug(coursed);

var options = {
args: [courseid]
};

PythonShell.run('word2vec.py', options, function (err, results) {

if (err) throw err;

console.log('results: %s', results[0]);

});

return res.ok();

标签: pythonnode.jssails.jschild-process

解决方案


到目前为止,我已经尝试安装 pythonshell,然后尝试从控制器导入并将代码添加到调用 .py 脚本的上传函数,但我收到错误,我将上传错误图片。这是新代码:

import { PythonShell } from 'python-shell';
var PythonShell = require('python-shell');

module.exports = {                                                                                  
   upload: function(req, res) {
        var uploadFile = req.file('uploadFile')

        uploadFile.upload({
            saveAs: 'image.png',
        }, function onUploadComplete(err, files) {

            let options = {
                mode: 'text',
                pythonOptions: ['-u'], // get print results in real-time
                scriptPath: sails.config.pythonPath,
                args: ['1233ID', files[0].fd]
            };

            PythonShell.run('main2.py', options, function(err, results) {
                if (err) throw err;
                console.log('results: %s', results);
            });

            if (err)
                return res.serverError(err);

            return res.json({
                message: files.length + ' file(s) uploaded successfully!',
                files: files[0].fd
            });
        });
    }
};                                                                                          

查看错误的屏幕截图


推荐阅读