构建一个调用 Python 脚本的 Node.js 服务器

3
我将尝试设置一个简单的Node.Js服务器,当访问一个URL时调用Python脚本。以下是Python和Node.js服务器文件。
当我访问服务器的URL时,页面会加载!但然后服务器崩溃,并在命令提示符中给出以下错误:
    Server listening on: http://localhost:8080/
this is here so we are in
events.js:141
      throw er; // Unhandled 'error' event
      ^

Error: spawn C:UsersShubhamAnaconda3libos.py ENOENT
    at exports._errnoException (util.js:837:11)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:178:32)
    at onErrorNT (internal/child_process.js:344:16)
    at doNTCallback2 (node.js:429:9)
    at process._tickCallback (node.js:343:17)

在Web浏览器控制台中输入以下内容:
GET http://localhost:8080/favicon.ico net::ERR_CONNECTION_REFUSED

我已经检查了类似的问题,但它们有些不同,它们的修复方法对我没有帮助。 我已清除缓存并进行了检查。
Python文件:
import sys
def runForFun(artist, song, lyrics):
    if lyrics is None:
        print("artist:" + artist)
        print("song:"+song)
        print("lyrics:"+lyrics)

        theme = "theme"
        return theme
    else :
        print("lyrics: "+lyrics)


try:    
    runForFun(sys.argv[0], sys.argv[1], sys.argv[2])
except IndexError:
    print('Please supply arguments')

Node.js文件

//Lets require/import the HTTP module
var http = require('http');
var PythonShell = require('python-shell');

//Lets define a port we want to listen to
const PORT=8080; 

//We need a function which handles requests and send response
function handleRequest(request, response){


    var options = {
      mode: 'text',
      pythonPath: 'C:\Users\Shubham\Anaconda3\lib\os.py',
      pythonOptions: ['-u'],
      scriptPath: 'C:\Users\Shubham\Google Drive\Capstone\Theme Extraction',
      args: ['value1', 'value2', 'value3']
    };

    console.log("this is here so we are in");

    PythonShell.run('runPython.py', options, function (err, results) {
    if (err) throw err;
    console.log('results: %j', results, 'finished');
});
    response.end('It Works!! Path Hit: ' + request.url);
}

//Create a server
var server = http.createServer(handleRequest);

//Lets start our server
server.listen(PORT, function(){
    //Callback triggered when server is successfully listening. Hurray!
    console.log("Server listening on: http://localhost:%s/", PORT);
});

刚刚读到了这个错误.. Error: spawn C:UsersShubhamAnaconda3libos.py 这看起来像是一个文件路径吗?你可能需要转义反斜杠。 - OneCricketeer
另外,我认为pythonPath需要指向Python可执行文件,而不是Python脚本。 - OneCricketeer
你的代码中的 var options 是如何成为内部信息的?例如,你需要使用 C:\\Users - OneCricketeer
不是关于变量选项,我是在回复你的第一条评论。正在尝试你的第二个建议。谢谢。 - feltspar
我的评论是相关的。你的错误是指var options,在pythonPath: 'C:\Users\Shubham\Anaconda3\lib\os.py'处有未转义的反斜杠。 - OneCricketeer
是的!谢谢。非常愚蠢的错误。我从窗口地址栏复制粘贴了路径。 - feltspar
1个回答

2

您需要在文件路径中转义斜杠,我认为 pythonPath 应该指向 Python 可执行文件而不是脚本。

因此,正确的设置应该像这样:

var options = {
      mode: 'text',
      pythonPath: 'C:\\Python\\pythonw.exe',
      pythonOptions: ['-u'],
      scriptPath: 'C:\\Users\\Shubham\\Google Drive\\Capstone\\Theme Extraction',
      args: ['value1', 'value2', 'value3']
    }; 

总的来说,除非你特别需要Node.js,否则为什么不使用一个Python web框架,只需导入你的脚本就可以运行它呢?


我只是想学习。我也会尝试Python网络框架。谢谢! - feltspar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接