2017-10-16 89 views
1

我创建了一个python脚本来解析一个网站(IMDB)并将其组织成一个数据框。 我也有一个node.js应用程序,它允许我在python脚本中找到一个变量(基于电影名称的电影ID,代码为pyvar)。那么如何将运行JavaScript应用程序后得到的这个变量包含到python脚本中,运行脚本并将结果发送回node.js应用程序? (这将是数据帧转换为可以说JSON)Node.js应用程序与python脚本

的Node.js应用

var express = require("express") 
 
var app = express() 
 
var request = require("request") 
 
app.set("view engine", "ejs") 
 

 
app.get("/", function(req, res){ 
 
    res.render("search") 
 
}) 
 

 
app.get("/results", function(req, res){ 
 
    var query = req.query.search 
 
    var url = "http://www.omdbapi.com/?s=" + query + "&apikey=thewdb" 
 
    
 
    request(url, function(error, response, body){ 
 
     if(!error && response.statusCode == 200){ 
 
      var data = JSON.parse(body) 
 
      res.render("results", {data: data}) 
 
      var pyvar = data["Search"][0]["imdbID"] 
 
     }  
 
    }) 
 
}) 
 

 
app.listen(process.env.PORT, process.env.IP, function(){ 
 
    console.log("Movie App has started!!!"); 
 
})

果壳中的python脚本是这样的:

url = 'website.org/' + pyvar + '/blah' 
parse(url) 
return dataframe 

后我会以某种形式将数据帧发送回node.js应用程序并显示结果,如果允许我下载t他将数据帧转换为xlsx,但它可能太复杂。

+1

脚本通常采取在输入参数的形式或从stdin读取。脚本应输出到标准输出。如果您更新脚本以这种方式工作,则可以使用https://nodejs.org/api/child_process.html。 –

回答

1

您可以使用child_process spawn执行您的python脚本,如Felix Kling在他的评论中建议,并将其返回给您的nodejs应用程序。然后,您可以使用像node-xlsx这样的包将数据转换为Excel文件。

类似的东西:

app.js

// ... 
const { spawn } = require('child_process'); 
const xlsx = require('node-xlsx'); 

// ...  
app.get("/results", (req, res) => { 
    let query = req.query.search; 
    let url = "http://www.omdbapi.com/?s=" + query + "&apikey=thewdb"; 

    request(url, (error, response, body) => { 
    if (!error && response.statusCode == 200) { 
     let data = JSON.parse(body); 
     let pyvar = data["Search"][0]["imdbID"]; 

     // Call the python script 
     let pythonScript = spawn('./script.py', [pyvar]); 

     pythonScript.stdout.on('data', data => { 
     // Here transform the datatable to xls sheet 
     let xlsx = xlsx.build([{ name: "myXlsxSheet", data: data.toString() }]) 
     // And send the file 
     res.end(new Buffer(xlsx, 'binary')); 
     }); 
    } 
    }) 

}) 

// ... 

script.py

#!/usr/bin/python 

import sys 
import pandas 

pyvar = sys.argv[1] 

# Here the script that parse the website 
url = 'website.org/' + pyvar + '/blah' 
data = parse(url) 

print pandas.DataFrame(data) 
+0

实际上,我采取了类似的appriach,但使用python shell库,但基本知识有 –

+0

我不知道python-shell这似乎更加方便。 – TGrif