Go言語の外部コマンドでハマった件の備忘録
やりたかったこと
goの外部コマンドからconda activate 環境名で仮想環境のアクティベートしてpythonファイルを動かしたい
import (
"log"
"os/exec"
"fmt"
)
func main(){
out, err := exec.Commond(conda activate 環境名).Output()
if err = nil{
log.Fatalln(err)
}
fmt.Println(string(out))
}
これでいけるかと思ったがエラー( status exit 1 )しか返ってこない
外部コマンドでconda仮想環境をアクティベートするときは
exec.Command()の引数を("bash", "-c", "source activate 環境名")とするらしい
ということで
import (
"log"
"os/exec"
"fmt"
)
func main(){
out, err := exec.Commond("bash", "-c", "source activate 環境名").Output()
if err = nil{
log.Fatalln(err)
}
fmt.Println(string(out))
ついでに仮想環境をアクティベートしてpythonファイルを動かすのは当たり前だと思うので
import (
"log"
"os/exec"
"fmt"
)
func main(){
out, err := exec.Commond("bash", "-c", "source activate 環境名 && python hogehoge.py").Output()
if err = nil{
log.Fatalln(err)
}
fmt.Println(string(out))
環境名の後に
&& python なんちゃら.py"
をつける
それでもまだエラーが解決しないので
conda init bash
とターミナルで叩いたら解決。理由は不明