如何在FreeBSD上向os.StartProcess添加参数?

时间:2016-09-24 10:06:10

标签: go freebsd

我正在尝试使用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'没有添加到命令中,以及如何更正我的代码?

1 个答案:

答案 0 :(得分:0)

args的第一个元素是进程名称。 args[1]是实际的第一个参数。这就像os.Args(和C中的argv)列表工作一样。为避免处理这些低级别细节,您应该使用os/exec包来启动外部进程。

相关问题