【发布时间】:2019-04-15 08:08:25
【问题描述】:
我正在使用 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 & Maa Baap K Duaon Se Award Haasil Kiya",
" Qoum & Maa Baap K Duaon Se Award Haasil Kiya",
" Qoum & Maa Baap K Duaon Se Award Haasil Kiya"
],
"summary": " Qoum & Maa Baap K Duaon Se Award Haasil Kiya. Qoum & Maa Baap K Duaon Se Award Haasil Kiya."
},
{
"sentences": [
" Mushtaq Ahmed",
" Mushtaq Ahmed",
" Mushtaq Ahmed NIJAMHAMY"
],
"summary": " Mushtaq Ahmed. Mushtaq Ahmed NIJAMHAMY."
}
]
}
]
【问题讨论】:
-
您在尝试发送响应的
res.render('index_timeline'行中是否遇到错误? -
为不带 [] 大括号的 JSON 输入测试其他输入。一些 JSON 解析器需要 JSON {"arr": []} 作为对象的顶级包装器。如果确实与传递给此函数的 JSON 相同,则也将 console.log / 打印出来。
-
@AbhasTandon 我在上面编辑了日志。您现在可以检查错误。它不在 res.render('index_timeline') 中。提前致谢
-
@Zydnar 这是我在 console.log 上得到的:[object Object]
-
此外,如果一些非 JSON 内容被写入标准输出,python-shell 试图将其解析为 JSON,则可能会出现此错误。在 JSON 模式下,所有输出都应采用 JSON 编码,并带有用于分隔消息的回车。尝试将您的 python 代码作为独立脚本运行,并确保没有额外的输出来自它。很可能您的 python 代码正在发送一个空行字符作为输出,该节点试图解析为
JSON.parse("/\n")导致此错误。