Skip to content

Instantly share code, notes, and snippets.

@metasyn
Created October 6, 2018 19:41
Show Gist options
  • Save metasyn/0712bb26b3ba19e8598e6a0266ccb306 to your computer and use it in GitHub Desktop.
Save metasyn/0712bb26b3ba19e8598e6a0266ccb306 to your computer and use it in GitHub Desktop.
package main
import (
"io"
"log"
"os"
"os/exec"
"sync"
)
///////////////////
// Setup Logging //
///////////////////
const defaultLog = "/tmp/go-entrypoint.log"
type logger struct {
filename string
*log.Logger
}
var instance *logger
var once sync.Once
func getLogger() *logger {
once.Do(func() {
instance = createLogger(defaultLog)
})
return instance
}
func createLogger(fname string) *logger {
file, _ := os.OpenFile(fname, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0777)
return &logger{
filename: fname,
Logger: log.New(file, "go-entrypoint: ", log.Lshortfile),
}
}
///////////////////
// Setup Command //
///////////////////
func setupCommand(processPath, filePath string) (*exec.Cmd, io.WriteCloser) {
cmd := exec.Command(processPath, filePath)
// Create stdin pipe
in, err := cmd.StdinPipe()
if err != nil {
panic(err)
}
return cmd, in
}
//////////
// Main //
//////////
func main() {
logger := getLogger()
logger.Println("Inside a go process!")
p := "/opt/python/bin/python"
f := "reflector.py"
logger.Printf("Setting up: %s %s\n", p, f)
cmd, cin := setupCommand(p, f)
defer cin.Close()
logger.Println("Starting External Process...")
cmd.Stdout = os.Stdout
cmd.Stdin = os.Stdin
cmd.Stderr = os.Stderr
if err := cmd.Start(); err != nil {
panic(err)
}
err := cmd.Wait()
if err != nil {
logger.Println("Non-zero exit code: ", err)
}
logger.Println("Exiting from golang...")
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment