我正在尝试使用os.StartProcess
在FreeBSD计算机上启动带有参数的进程。在尝试了几种不同的方法来添加正确的参数并总是出错之后,我已经设置了这个简单的概念证明。
package main
import (
"log"
"os"
)
func main() {
command := "/usr/local/sbin/pkg"
args := []string{"install"}
procAttr := new(os.ProcAttr)
procAttr.Files = []*os.File{os.Stdin, os.Stdout, os.Stderr}
if process, err := os.StartProcess(command, args, procAttr); err != nil {
log.Println(err.Error())
} else {
log.Printf("%d", process.Pid)
}
}
这里的想法是,如果系统只是pkg
启动,它会抱怨缺少参数,但如果它启动pkg install
,它将建议install
命令的帮助。见下文:
pkg: not enough arguments
Usage: pkg [-v] [-d] [-l] [-N] [-j <jail name or id>|-c <chroot path>|-r <rootdir>] [-C <configuration file>] [-R <repo config dir>] [-o var=value] [-4|-6] <command> [<args>]
For more information on available commands and options see 'pkg help'.
或者
Usage: pkg install [-AfInFMqRUy] [-r reponame] [-Cgix] <pkg-name> ...
For more information see 'pkg help install'.
当我使用上面的go代码时,它会抱怨缺少参数,为什么我的参数'install'没有添加到命令中,以及如何更正我的代码?
答案 0 :(得分:0)
args的第一个元素是进程名称。 args[1]
是实际的第一个参数。这就像os.Args
(和C中的argv
)列表工作一样。为避免处理这些低级别细节,您应该使用os/exec
包来启动外部进程。