python - 从 nodejs 运行 python 脚本并返回 json

标签 python node.js json

我正在使用 python-shell 运行 python 脚本。 python 脚本(名为 combine.py)以 json 格式返回数据。但是代码在我的本地机器上运行良好,但在 aws 实例上运行不正常。我在 pm2 日志中收到以下错误:

SyntaxError: Unexpected token / in JSON at position 0
1|app      |     at JSON.parse (<anonymous>)
1|app      |     at PythonShell.asJson (/home/ubuntu/toolCaseWebsite/node_modules/python-shell/index.js:358:21)
1|app      |     at /home/ubuntu/toolCaseWebsite/node_modules/python-shell/index.js:310:42
1|app      |     at Array.forEach (<anonymous>)
1|app      |     at PythonShell.recieveInternal (/home/ubuntu/toolCaseWebsite/node_modules/python-shell/index.js:306:15)
1|app      |     at PythonShell.receiveStderr (/home/ubuntu/toolCaseWebsite/node_modules/python-shell/index.js:290:21)
1|app      |     at Socket.<anonymous> (/home/ubuntu/toolCaseWebsite/node_modules/python-shell/index.js:108:18)
1|app      |     at Socket.emit (events.js:182:13)
1|app      |     at Socket.EventEmitter.emit (domain.js:442:20)
1|app      |     at addChunk (_stream_readable.js:279:12)

我已确保 python 脚本返回有效的 json 数据,方法是首先将数据放入文件中,然后通过在线 json 验证器检查该数据。

Nodejs(javascript 文件)

  var ps = require('python-shell')
  noOfLines = 2
  noOfClusters = 5
  var options = {
    mode: 'json',
    pythonOptions: ['-u'], // get print results in real-time
    scriptPath: './pythonScripts/',
    args: [noOfClusters, noOfLines, processingData]
  }

  ps.PythonShell.run('combine2.py', options, function(err, results) {
    if (err) throw err
    // Results is an array consisting of messages collected during executio n
    //console.log(results)

    // Data send to index_timeline
    res.render('index_timeline', {
      results: results[0]
    })

    fs.writeFile('myOutput.txt', JSON.stringify(results, 0, 2), err => {
      // throws an error, you could also catch it here
      if (err) throw err

      // success case, the file was saved
      console.log('File saved!')
    })
  })

Python 脚本(combine.py)

if __name__ == "__main__":

   # getting parameters
    content = sys.argv[3]
    nclusters= int(sys.argv[1])
    noOfLines=int(sys.argv[2])


    data={"clusters":[]}

    # Data Cleaning and then splitting into sentences

    sentences = dataCleaning(content).split('.')#splitting sentences on basis of comma rather fullstop
    sentences = list(filter(None, sentences))

    temp=list()
    myDict=dict()
    summarizing=str()

    #getting clusters
    clusters = cluster_sentences(sentences, nclusters)


    for cluster in range(nclusters):
        for i,sentence in enumerate(clusters[cluster]):
            temp.append(sentences[sentence])
            summarizing+=sentences[sentence]+". "
        myDict["sentences"]=list(temp)
        sentence_tokens, word_tokens = tokenize_content(summarizing)
        sentence_ranks = score_tokens(word_tokens, sentence_tokens)
        myDict["summary"]=str(summarize(sentence_ranks, sentence_tokens,noOfLines))
        data["clusters"].append(dict(myDict))
        myDict.clear()
        del temp[:]
        summarizing=''

    print(json.dumps(data))

myOutput.txt(我在上面的txt文件中写的数据)

[
  {
    "clusters": [
      {
        "sentences": [
          " Qoum &amp; Maa Baap K Duaon Se Award Haasil Kiya",
          " Qoum &amp; Maa Baap K Duaon Se Award Haasil Kiya",
          " Qoum &amp; Maa Baap K Duaon Se Award Haasil Kiya"
        ],
        "summary": " Qoum &amp; Maa Baap K Duaon Se Award Haasil Kiya. Qoum &amp; Maa Baap K Duaon Se Award Haasil Kiya."
      },
      {
        "sentences": [
          " Mushtaq Ahmed",
          " Mushtaq Ahmed",
          " Mushtaq Ahmed NIJAMHAMY"
        ],
        "summary": " Mushtaq Ahmed. Mushtaq Ahmed NIJAMHAMY."
      }
    ]
  }
]

最佳答案

如果一些非 JSON 内容被写入标准输出,python-shell 试图将其解析为 JSON,则可能会出现此错误。在 JSON 模式下,所有输出都应采用 JSON 编码,并使用回车符分隔消息。

尝试将您的 Python 代码作为独立脚本运行,并确保没有额外的输出(例如换行)。

很可能您的 Python 代码正在发送一个空行字符作为输出,该 Node 试图将其解析为 JSON.parse("/\n") 导致此错误。

Uncaught SyntaxError: Unexpected token / in JSON at position 0
    at JSON.parse 

关于python - 从 nodejs 运行 python 脚本并返回 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55684896/

相关文章:

python - Sympysolve不会返回答案

Python写入hdfs文件

javascript - 以编程方式启动 vue-cli-service serve 时控制 webpack 的冗长程度

JavaScript 未捕获类型错误 : Facebook Like Counter

json - 在快速映射时为变量编写 setter 和 getter 方法?

python - 如何在Python中将字符串与点匹配

android - python android 脚本在 AVD 设备中崩溃

javascript - 显示来自 GridFs (MongoDB) 的图像

node.js - sudo npm install -g Node 检查器错误

json - 当发布到我的 Django API : errorcom. google.gson.JsonParseException: 无法解析 json