2015-02-03 2 views
1

에서 'go build'명령을 호출하면 코드를 동적으로 작성해야하고 코드를 테스트해야합니다. 그래서 "빌드 빌드"명령을 사용하여 'os.exec'함수를 호출해야합니다.내 프로젝트에 golang os.exec

내가 '/data/test/mycode.go'와 같은 임시 디렉토리에 코드를 작성할 때. 그리고 나는 'go build'라고 부르려고하는데, 'no such file or directory'라는 에러를 리턴한다. 어떻게이 작업을 올바르게 수행 할 수 있습니까? 덕분에 아래의 모든 :

몇 가지 코드 '

// is not work too 
// goPath, err := exec.LookPath("go") 

var out, stderr bytes.Buffer 
cmd := exec.Command(fmt.Sprintf("%s/go build /data/test/mycode.go", goPath)) 
cmd.Stdout = &out 
cmd.Stderr = &stderr 
err = cmd.Run() 

PS :하지만 난 명령 호출'/data/test/mycode.go '직접 터미널에 구축 이동합니다. 그것은 효과가 있습니다.

+0

정확히 "0"인수가있는 "/ usr/local/bin/go build /data/test/mycode.go"와 같은 프로그램을 실행하고 있습니다. 각 인수 ("build"및 "/data/test/mycode.go")를 개별적으로 제공해야합니다. exec.Command' arg ... string'이 좋은 것입니다. – Volker

+0

@Volker – William

답변

2

fmt.Sprintf("%s/go build /data/test/mycode.go", goPath) string 반환하는 단일 문자열은 내부적으로 블랭크 간격으로 나뉘지만 단일 문자열입니다.

os/exec.Command(name string, arg ...string) *Cmd 예상되는 인수가 적습니다. 그것은 하나의 문자열 자체를 나눌 수 없습니다.

+0

고마워요, 작동합니다. – William