【发布时间】:2022-11-15 15:41:49
【问题描述】:
我正在用 python 解析一个 pdf 文件并将文本字符串发送回 golang 服务器。当我使用较小的 pdf 文件运行代码时,它可以正常工作,但对于大型 pdf 文件,它会返回 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)
}
这是我从cmd.Err 得到的错误
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xc0000005 code=0x0 addr=0x18 pc=0xfc00e6]
这是我的python脚本,我在解析后打印字符串:
import fitz
import sys
path = 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)
如果我单独运行 python 脚本,它会完美运行。在此行抛出错误output, err := cmd.Output() 如果 pdf 文件很小,它可以正常工作,但如果 pdf 文件较大(例如:一本书 pdf)它会失败。
我认为错误是cmd.Output() 可以返回的字节大小。有没有更好的方法将数据从 python 脚本传输到 golang。
【问题讨论】:
-
你似乎没有打电话给
cmd.Run? (所以我猜你的示例代码不完整?)。请包含错误输出的堆栈跟踪(这应该提供有关问题原因的线索)。请注意,您正在输出错误,然后继续不管(并且完全忽略其他人),我猜这就是您感到恐慌的原因(可能是由较早的错误引起的 - 例如os.Create失败意味着f为零)。