-
-
Notifications
You must be signed in to change notification settings - Fork 2
/
cmd.go
65 lines (52 loc) · 1.71 KB
/
cmd.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
package pty
import (
"context"
"os"
"syscall"
)
// Cmd is a command that can be started attached to a pseudo-terminal.
// This is similar to the API of exec.Cmd. The main difference is that
// the command is started attached to a pseudo-terminal.
// This is required as we cannot use exec.Cmd directly on Windows due to
// limitation of starting a process attached to a pseudo-terminal.
// See: https://github.com/golang/go/issues/62708
type Cmd struct {
ctx context.Context
pty Pty
sys interface{}
// Path is the path of the command to run.
Path string
// Args holds command line arguments, including the command as Args[0].
Args []string
// Env specifies the environment of the process.
// If Env is nil, the new process uses the current process's environment.
Env []string
// Dir specifies the working directory of the command.
// If Dir is the empty string, the current directory is used.
Dir string
// SysProcAttr holds optional, operating system-specific attributes.
SysProcAttr *syscall.SysProcAttr
// Process is the underlying process, once started.
Process *os.Process
// ProcessState contains information about an exited process.
// If the process was started successfully, Wait or Run will populate this
// field when the command completes.
ProcessState *os.ProcessState
// Cancel is called when the command is canceled.
Cancel func() error
}
// Start starts the specified command attached to the pseudo-terminal.
func (c *Cmd) Start() error {
return c.start()
}
// Wait waits for the command to exit.
func (c *Cmd) Wait() error {
return c.wait()
}
// Run runs the command and waits for it to complete.
func (c *Cmd) Run() error {
if err := c.Start(); err != nil {
return err
}
return c.Wait()
}