我有一个应用程序nodejs请求使用python-shell npm包发送到python。和python脚本读取数据和解析字符串。
nodejs文件:teststr.js
let buf = `<html><body><p>Reply</p></body></html>`
var PythonShell = require('python-shell')
var options = {
mode: 'binary',
args: ['html'],
scriptPath: __dirname + '/',
pythonPath: '/usr/bin/python3'
}
var pyshell = new PythonShell('test.py', options)
pyshell.stdout.on('data', function (message) {
console.log(message)
})
pyshell.send(buf)
pyshell.end(function (err) {
if (err) {
console.log('End Script' + err)
}
})
Python文件:test.py
import sys
import base64
import struct
import io
type = sys.argv[1]
html = ""
htmlBuffer = ""
for line in sys.stdin.buffer:
htmlBuffer = io.BufferedReader(line)
#htmlBuffer = to_str(htmlBuffer) #htmlBuffer.decode('utf-8', errors='ignore').strip()
print("%s" % (htmlBuffer))
给定输出如下:
<Buffer 62 27 3c 68 74 6d 6c 3e 3c 62 6f 64 79 3e 3c 70 3e 52 65 70 6c 79 3c 2f 70 3e 3c 2f 62 6f 64 79 3e 3c 2f 68 74 6d 6c 3e 27 0a>
期望结果:
<html><body><p>Reply</p></body></html>
答案 0 :(得分:0)
编辑:
你在帖子中的test.py代码中可能有问题,因为如果我运行它我会得到错误:
End ScriptError: AttributeError: 'bytes' object has no attribute 'readable'
但无关紧要,我们可以使用test.py的这个简单变体:
import sys
for line in sys.stdin:
print(line.rstrip())
关键是,你的输出不是python输出,但它意味着message
中的参数pyshell.stdout.on('data', function (message) {...
是一个Buffer对象。所以(对于我之前发布的帖子中的错误,我们需要通过添加toString()
方法来编辑teststr.js。
pyshell.stdout.on('data', function (message) {
console.log(message.toString())
})
然后它有效。您不必担心Python中的缓冲区。