func pyRun(args *py.Tuple, kw *py.Dict) (py.Object, error) { command := "" var bg py.Object var argO py.Object kwlist := []string{"cmd", "args", "bg"} err := py.ParseTupleAndKeywords(args, kw, "s|OO", kwlist, &command, &argO, &bg) if err != nil { return nil, err } var argS []py.Object switch a := argO.(type) { case *py.Tuple: argS = a.Slice() case *py.List: argS = a.Slice() default: return nil, py.TypeError.Err("args must be tuple or list") } cArgs := make([]string, len(argS)) for i, obj := range argS { str, err := obj.Base().Str() if err != nil { return nil, err } pyS := str.(*py.String) cArgs[i] = pyS.String() } if bg == nil { bg = py.False } err = runCmd(command, cArgs, bg.IsTrue()) if err != nil { return nil, err } py.None.Incref() return py.None, nil }