2017-11-24 11 views
0

私はpython-shell npmパッケージを使用してPythonにリクエストを送信する1つのアプリケーションnodejsを持っています。 Pythonスクリプトはデータを読み込み、文字列を解析します。Nodejs InputStreamバッファをPythonを使用して文字列に変換する

nodejsファイル:

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のファイルteststr.js: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

EDIT:私はそれを実行する場合、私はエラーを取得するため

あなたは、ここにポストで、おそらくtest.pyのコードで間違った何かを持っている:

End ScriptError: AttributeError: 'bytes' object has no attribute 'readable' 

しかし、それは問題ではありません、我々は使用することができますtest.pyのこの簡単な変形:pyshell.stdout.on('data', function (message) {...で引数messageは、バッファオブジェクトであることを、

import sys 
for line in sys.stdin: 
    print(line.rstrip()) 

ポイントは、あなたの出力はパイソン出力されていないこと、であるが、それは意味します。だから(私の以前の記事で申し訳ありません)申し訳ありませんが、toString()メソッドを追加してteststr.jsを編集する必要があります。

pyshell.stdout.on('data', function (message) { 
    console.log(message.toString()) 
}) 

次に動作します。 Pythonのバッファーについて心配する必要はありません。

+0

いいえ私はpythonを使用してhtmlを処理し、nodejsに応答を送り返したいと思います。現在、私はPythonのバッファとして入力を受け取りました。どのようにバッファを文字列に変換するのですか? – Chirag

+0

'<バッファ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 0a> ' – Chirag

関連する問題