如何解决我们如何使用 process.stdout.on(....) 之外的变量?
我从 node.js 中的 python 脚本接收一个变量。 我用 :
读取了这个变量subprocess.stdout.on('data',(data) => {
dataString += data.toString();
})
但我不能在“subprocess.stdout.on”之外使用“dataString”,它只是空的。 我需要从 python 接收到的数据才能在其他地方使用它。 请问这个有什么解决方案吗?
解决方法
node.js 文件:
const path = require('path')
const {spawn} = require('child_process')
const fs = require('fs')
var img = "./img/facture1.jpg"
const data64 = fs.readFileSync(img,'base64')
const fetch = require("node-fetch")
var dataString = '';
var r = spawn('python',[
"-u",path.join(__dirname,'my_script.py'),img,]);
r.stdin.write(data64);
r.stdin.end();
function runScript(){
return r
}
const subprocess = runScript()
subprocess.stdout.on('data',(data) => {
dataString += data.toString();
})
subprocess.stdout.on('end',() =>{
dataStr = dataString;
console.log("\n i'm from python",dataString);
});
python 文件:
#!/usr/bin/python
import io
import os
import sys,json
import base64
from typing import IO
from PIL import Image
import cv2
import numpy as np
import PIL.Image
import pytesseract
from pytesseract import image_to_string
def read_in():
lines = sys.stdin.readlines()
return lines
def stringToRGB(base64_string):
imgdata = base64.b64decode(str(base64_string))
image = Image.open(io.BytesIO(imgdata))
return cv2.cvtColor(np.array(image),cv2.COLOR_BGR2RGB)
def search_string_in_file(file_name,string_to_search1,string_to_search2):
line_number = 0
list_of_results = []
with open(file_name,'r') as read_obj:
for line in read_obj:
line_number += 1
if string_to_search1 in line:
list_of_results.append(line.rstrip())
if string_to_search2 in line:
list_of_results.append(line.rstrip())
return list_of_results
def main():
lines = read_in()
window_name = 'Image'
image = stringToRGB(lines)
imS = cv2.resize(image,(960,700))
pytesseract.pytesseract.tesseract_cmd = r"./Tesseract-OCR/tesseract.exe"
image_to_text = pytesseract.image_to_string(image,lang='eng')
name = sys.argv[1]
name = name[2:-4]
f = open('%s.txt' % name,"w")
f.write(image_to_text)
f.close()
matched_lines = search_string_in_file('%s.txt' % name,'Total','A PAYER')
for elem in matched_lines:
elem = elem[14:18]
print("\n",elem)
if __name__ == "__main__":
main()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。