调用 python 脚本并捕获二进制输出
Call python script and catch binary output
我想在 go 中操作图像,并且我在 python 中已经有一个脚本来修改图像。我只需要从 python 脚本发送图像即可。为此,我通过以下方式进行:
Python 脚本:
image = image_in_bytes
print (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 []byte
cmd.Wait()
但是对于上面的代码,golang 一直在等待,没有任何输出...
有什么想法吗?
如下所述,对我来说完美无缺:
>>> 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)
Las 但同样重要的是,我 运行 以下代码:
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 文件中的方式有问题运行。
我想在 go 中操作图像,并且我在 python 中已经有一个脚本来修改图像。我只需要从 python 脚本发送图像即可。为此,我通过以下方式进行:
Python 脚本:
image = image_in_bytes
print (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 []byte
cmd.Wait()
但是对于上面的代码,golang 一直在等待,没有任何输出...
有什么想法吗?
如下所述,对我来说完美无缺:
>>> 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)
Las 但同样重要的是,我 运行 以下代码:
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 文件中的方式有问题运行。