Пример #1
0
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
}