2016-09-24 2 views
3

os.StartProcess을 사용하여 FreeBSD 컴퓨터에서 인수로 프로세스를 시작하려고합니다. 올바른 인수를 추가하고 항상 오류가 발생하는 여러 가지 방법을 시도한 후에이 간단한 개념 증명을 설정했습니다. 여기FreeBSD에서 os.StartProcess에 인수를 추가하는 방법은 무엇입니까?

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'. 

는 것이다 인수 누락에 대한 불만, 왜 내 인수가 명령에 추가, 어떻게 해결하는 방법하지 '설치'입니다 내 코드?

답변

0

args의 첫 번째 요소는 프로세스 이름입니다. args[1]이 실제 첫 번째 인수입니다. 이것은 os.Args (및 C에서 argv)과 동일합니다. 이러한 낮은 수준의 세부 정보를 다루지 않으려면 os/exec 패키지를 사용하여 외부 프로세스를 시작해야합니다.

+0

이것은 매우 직관적입니다. 나는'os/exec'를 먼저 사용하려고했으나 매번 "오류 코드 1"을주었습니다. 나는 "인수 오류"를 의미한다고 생각했습니다. 그런 다음 소스 코드로 가서 무엇이 의미 있는지 알아 보았고'os.StartProcess'에서 끝났습니다. 아마도'os/exec'도 첫 번째 인수와 같은 이름과 다시 같은 이름을 기대할 것입니까? – Bazzz

관련 문제