4 changed files with 60 additions and 53 deletions
@ -0,0 +1,49 @@
@@ -0,0 +1,49 @@
|
||||
package main |
||||
|
||||
import ( |
||||
"os" |
||||
"os/exec" |
||||
"runtime" |
||||
"strings" |
||||
) |
||||
|
||||
type externalCmd struct { |
||||
cmd *exec.Cmd |
||||
} |
||||
|
||||
func startExternalCommand(cmdstr string, pathName string) (*externalCmd, error) { |
||||
var cmd *exec.Cmd |
||||
if runtime.GOOS == "windows" { |
||||
// in Windows the shell is not used and command is started directly
|
||||
// variables are replaced manually in order to allow
|
||||
// compatibility with linux commands
|
||||
cmdstr = strings.ReplaceAll(cmdstr, "$RTSP_SERVER_PATH", pathName) |
||||
args := strings.Fields(cmdstr) |
||||
cmd = exec.Command(args[0], args[1:]...) |
||||
|
||||
} else { |
||||
cmd = exec.Command("/bin/sh", "-c", "exec "+cmdstr) |
||||
} |
||||
|
||||
// variables are available through environment variables
|
||||
cmd.Env = append(os.Environ(), |
||||
"RTSP_SERVER_PATH="+pathName, |
||||
) |
||||
|
||||
cmd.Stdout = os.Stdout |
||||
cmd.Stderr = os.Stderr |
||||
|
||||
err := cmd.Start() |
||||
if err != nil { |
||||
return nil, err |
||||
} |
||||
|
||||
return &externalCmd{ |
||||
cmd: cmd, |
||||
}, nil |
||||
} |
||||
|
||||
func (e *externalCmd) close() { |
||||
e.cmd.Process.Signal(os.Interrupt) |
||||
e.cmd.Wait() |
||||
} |
Loading…
Reference in new issue