如何使用exec命令将字节数据从golang发送到python?

时间:2018-01-16 08:12:00

标签: python go io stdin

Main.go

func main() {
    bytearray=getbytearray()//getting an array of bytes
    cmd := exec.Command("python3", "abc.py")
    in:=cmd.Stdin
    cmd.Run()
}

我想将字节数组作为python脚本

的输入发送

abc.py

import sys
newFile.write(sys.stdin) //write the byte array got as input to the newfile

如何从golang向python发送字节并将其保存到文件中?

1 个答案:

答案 0 :(得分:1)

您可以通过exec.Command上的Cmd.StdinPipe来访问流程'stdin。这会为您提供一个WriteCloser,当进程终止时会自动关闭。

stdin的写入必须在cmd.Run调用的单独goroutine中完成。

这是一个写“你好!”的简单例子。 (作为字节数组)到stdin。

package main

import (
  "fmt"
  "os/exec"
)

func main() {
  byteArray := []byte("hi there!")
  cmd := exec.Command("python3", "abc.py")

  stdin, err := cmd.StdinPipe()
  if err != nil {
    panic(err)
  } 

  go func() {
    defer stdin.Close()
    if _, err := stdin.Write(byteArray); err != nil {
      panic(err) 
    }
  }()

  fmt.Println("Exec status: ", cmd.Run())
}

你还想在python中实际读取stdin:

import sys
f = open('output', 'w')
f.write(sys.stdin.read())