github.com/jfrog/jfrog-cli-go@v1.22.1-0.20200318093948-4826ef344ffd/artifactory/utils/pip/pip.go (about)

     1  package pip
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"github.com/jfrog/jfrog-client-go/utils/errorutils"
     7  	"github.com/jfrog/jfrog-client-go/utils/log"
     8  	"io"
     9  	"os/exec"
    10  )
    11  
    12  // Get executable path.
    13  // If run inside a virtual-env, this should return the path for the correct executable.
    14  func GetExecutablePath(executableName string) (string, error) {
    15  	executablePath, err := exec.LookPath(executableName)
    16  	if err != nil {
    17  		return "", errorutils.CheckError(err)
    18  	}
    19  
    20  	if executablePath == "" {
    21  		return "", errorutils.CheckError(errors.New(fmt.Sprintf("Could not find '%s' executable", executableName)))
    22  	}
    23  
    24  	log.Debug(fmt.Sprintf("Found %s executable at: %s", executableName, executablePath))
    25  	return executablePath, nil
    26  }
    27  
    28  func (pc *PipCmd) GetCmd() *exec.Cmd {
    29  	var cmd []string
    30  	cmd = append(cmd, pc.Executable)
    31  	cmd = append(cmd, pc.Command)
    32  	cmd = append(cmd, pc.CommandArgs...)
    33  	return exec.Command(cmd[0], cmd[1:]...)
    34  }
    35  
    36  func (pc *PipCmd) GetEnv() map[string]string {
    37  	return pc.EnvVars
    38  }
    39  
    40  func (pc *PipCmd) GetStdWriter() io.WriteCloser {
    41  	return pc.StrWriter
    42  }
    43  
    44  func (pc *PipCmd) GetErrWriter() io.WriteCloser {
    45  	return pc.ErrWriter
    46  }
    47  
    48  type PipCmd struct {
    49  	Executable  string
    50  	Command     string
    51  	CommandArgs []string
    52  	EnvVars     map[string]string
    53  	StrWriter   io.WriteCloser
    54  	ErrWriter   io.WriteCloser
    55  }