为了账号安全,请及时绑定邮箱和手机立即绑定

调用 python 脚本并捕获二进制输出

调用 python 脚本并捕获二进制输出

Go
慕沐林林 2023-07-26 17:46:07
我想在 go 中操作图像,并且我已经有一个 python 脚本来修改图像。我只需要从 python 脚本发送图像即可。为此,我按以下方式进行:Python脚本:image = image_in_bytesprint (image)去脚本:cmd := exec.Command("python", "image.py")stdout, err := cmd.StdoutPipe()if err != nil {    panic(err)}err = cmd.Start()if err != nil {    panic(err)}body, _ := ioutil.ReadAll(stdout) //I need the image in []bytecmd.Wait()但是使用上面的代码 golang 会永远等待,没有任何输出......任何想法?
查看完整描述

1 回答

?
HUX布斯

TA贡献1876条经验 获得超6个赞

对我来说工作完美,如下所述:


>>> with open("osx.png","rb") as imageFile:

...     img = repr(imageFile.read())

>>> imageFile.close()

>>> with open("sample.py","w") as pyfile:

...     pyfile.write(img)

>>> pyfile.close()

然后,我手动编辑 pyfile 看起来像


img = '\x89PNG\r\n\x1a\n[remainder skipped for brevity]'

print(img)

最后但并非最不重要的是,我运行了以下代码:


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

    stdout, err := cmd.StdoutPipe()

    if err != nil {

        panic(err)

    }

    err = cmd.Start()

    if err != nil {

        panic(err)

    }


    body, err := ioutil.ReadAll(stdout) //I need the image in []byte

    cmd.Wait()


    if err != nil {

        log.Fatalf("error reading bytes: %s", err)

    }


    log.Printf("Read %d bytes", len(body))


    o, err := os.OpenFile("img.png", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0660)

    if err != nil {

        log.Fatalf("opening img.png: %s", err)

    }

    defer o.Close()

    n, err := o.Write(body)


    if err != nil {

        log.Fatalf("writing image to file: %s", err)

    }

    if n < len(body) {

        log.Fatal("short write")

    }

完整代码可在https://gist.github.com/mwmahlberg/eb47495f68bed4e3cb8073447efdb53d下找到


我想可以肯定的是,您在 Python 文件中存储图像数据的方式有些奇怪。


查看完整回答
反对 回复 2023-07-26
  • 1 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信