Pythonスクリプト内からコマンドを実行する際、subrocess.call
にshell=True
を指定すると、argsに渡した文字列がシェルによってそのまま実行されます。
PythonのドキュメントによればUnix系なら/bin/sh
、WindowsならCOMSPEC
環境変数がシェルとして使われるようなので、Goで同様のことをやる場合は、以下のようになるでしょうか。
main.go
package main
import (
"os"
"os/exec"
"runtime"
)
func callSubprocess(cmdString string) (err error) {
osname := runtime.GOOS
var cmd *exec.Cmd
if osname == "windows" {
shell := os.Getenv("COMSPEC")
cmd = exec.Command(shell, "/c", cmdString)
} else {
shell := "/bin/sh"
cmd = exec.Command(shell, "-c", cmdString)
}
cmd.Stdout = os.Stdout
err = cmd.Run()
return
}
func main() {
err := callSubprocess("dir")
if err != nil {
os.Exit(1)
}
}