第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

每當(dāng)字符串太長而將其傳回以使用 cmd.Output() 從 python 腳本返回時(shí)都會(huì)出錯(cuò)

每當(dāng)字符串太長而將其傳回以使用 cmd.Output() 從 python 腳本返回時(shí)都會(huì)出錯(cuò)

Go
料青山看我應(yīng)如是 2023-03-15 13:50:02
我正在用 python 解析一個(gè) pdf 文件并將文本字符串發(fā)送回 golang 服務(wù)器。當(dāng)我使用較小的 pdf 文件運(yùn)行代碼時(shí),它可以正常工作,但對(duì)于較大的 pdf 文件,它會(huì)返回exit status 1這是我正在使用的代碼:func parsePdf(path string) string {    cmd := exec.Command("python", "pdf_parser.py", path)    output, err := cmd.Output() //this line throws error    if err != nil {        fmt.Println(err)    }    f, _ := os.Create("go-pdf-output.txt")    _, err := f.WriteString(string(output))    if err != nil {        fmt.Println(err2)    }    return string(output)}這是我得到的錯(cuò)誤cmd.Errpanic: runtime error: invalid memory address or nil pointer dereference[signal 0xc0000005 code=0x0 addr=0x18 pc=0xfc00e6]這是我的 python 腳本,我在其中打印解析后的字符串:import fitzimport syspath = sys.argv[1]doc = fitz.open(path)list = []for page in doc:    text = page.get_text("text")    list.append(text)outputString= ' '.join(list)print(outputString)如果我單獨(dú)運(yùn)行 python 腳本,它會(huì)完美運(yùn)行。在此行拋出錯(cuò)誤output, err := cmd.Output()如果 pdf 文件很小,它工作正常但如果 pdf 文件較大(例如:一本書 pdf),它會(huì)失敗。我認(rèn)為錯(cuò)誤是可以返回的字節(jié)大小cmd.Output()。有沒有更好的方法將數(shù)據(jù)從 python 腳本傳輸?shù)?golang。
查看完整描述

1 回答

?
慕尼黑的夜晚無繁華

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊

我自己解決了。這很簡單,而不是直接打印outputString,而是打印一個(gè)json.dumps(). 我將在下面提供整個(gè)代碼:


main.go文件


package main


import (

    "bytes"

    "encoding/json"

    "fmt"

    "log"

    "os"

    "os/exec"

)


type ParseText struct {

    Text string `json:"text"`

}


func main() {

    fmt.Println("Running...")


    pdfPath := "./Y2V7 Full With SS-2.pdf"

    _, err := parsePdf(pdfPath)

    if err != nil {

        fmt.Println(err)

    }

}


func parsePdf(path string) (string, error) {

    cmd := exec.Command("python", "pdf_parser.py", path)

    var stdout, stderr bytes.Buffer


    cmd.Stdout = &stdout

    cmd.Stderr = &stderr

    err := cmd.Run()

    if err != nil {

        log.Printf("Error when executing python: %s\n", stderr.Bytes())

        return "", fmt.Errorf("Error executing python: %w", err)

    }


    res := ParseText{}

    err = json.Unmarshal(stdout.Bytes(), &res)

    writeToFile("go-pdf.txt", res.Text)

    return res.Text, err

}

func writeToFile(fileName, text string) {

    f, err := os.Create(fileName)


    if err != nil {

        log.Fatal(err)

    }


    defer f.Close()


    _, err2 := f.WriteString(text)


    if err2 != nil {

        log.Fatal(err2)

    }

}

pdf-parser.py文件


import fitz

import sys

import json


URL = sys.argv[1]

doc = fitz.open(URL)

list = []


for page in doc:

    text = page.get_text("text")

    list.append(text)


outputString= ' '.join(list)

print(json.dumps({"text":outputString}))


查看完整回答
反對(duì) 回復(fù) 2023-03-15
  • 1 回答
  • 0 關(guān)注
  • 125 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)