Source file
src/os/exec/example_test.go
1
2
3
4
5 package exec_test
6
7 import (
8 "bytes"
9 "context"
10 "encoding/json"
11 "fmt"
12 "io"
13 "log"
14 "os"
15 "os/exec"
16 "strings"
17 "time"
18 )
19
20 func ExampleLookPath() {
21 path, err := exec.LookPath("fortune")
22 if err != nil {
23 log.Fatal("installing fortune is in your future")
24 }
25 fmt.Printf("fortune is available at %s\n", path)
26 }
27
28 func ExampleCommand() {
29 cmd := exec.Command("tr", "a-z", "A-Z")
30 cmd.Stdin = strings.NewReader("some input")
31 var out bytes.Buffer
32 cmd.Stdout = &out
33 err := cmd.Run()
34 if err != nil {
35 log.Fatal(err)
36 }
37 fmt.Printf("in all caps: %q\n", out.String())
38 }
39
40 func ExampleCommand_environment() {
41 cmd := exec.Command("prog")
42 cmd.Env = append(os.Environ(),
43 "FOO=duplicate_value",
44 "FOO=actual_value",
45 )
46 if err := cmd.Run(); err != nil {
47 log.Fatal(err)
48 }
49 }
50
51 func ExampleCmd_Output() {
52 out, err := exec.Command("date").Output()
53 if err != nil {
54 log.Fatal(err)
55 }
56 fmt.Printf("The date is %s\n", out)
57 }
58
59 func ExampleCmd_Run() {
60 cmd := exec.Command("sleep", "1")
61 log.Printf("Running command and waiting for it to finish...")
62 err := cmd.Run()
63 log.Printf("Command finished with error: %v", err)
64 }
65
66 func ExampleCmd_Start() {
67 cmd := exec.Command("sleep", "5")
68 err := cmd.Start()
69 if err != nil {
70 log.Fatal(err)
71 }
72 log.Printf("Waiting for command to finish...")
73 err = cmd.Wait()
74 log.Printf("Command finished with error: %v", err)
75 }
76
77 func ExampleCmd_StdoutPipe() {
78 cmd := exec.Command("echo", "-n", `{"Name": "Bob", "Age": 32}`)
79 stdout, err := cmd.StdoutPipe()
80 if err != nil {
81 log.Fatal(err)
82 }
83 if err := cmd.Start(); err != nil {
84 log.Fatal(err)
85 }
86 var person struct {
87 Name string
88 Age int
89 }
90 if err := json.NewDecoder(stdout).Decode(&person); err != nil {
91 log.Fatal(err)
92 }
93 if err := cmd.Wait(); err != nil {
94 log.Fatal(err)
95 }
96 fmt.Printf("%s is %d years old\n", person.Name, person.Age)
97 }
98
99 func ExampleCmd_StdinPipe() {
100 cmd := exec.Command("cat")
101 stdin, err := cmd.StdinPipe()
102 if err != nil {
103 log.Fatal(err)
104 }
105
106 go func() {
107 defer stdin.Close()
108 io.WriteString(stdin, "values written to stdin are passed to cmd's standard input")
109 }()
110
111 out, err := cmd.CombinedOutput()
112 if err != nil {
113 log.Fatal(err)
114 }
115
116 fmt.Printf("%s\n", out)
117 }
118
119 func ExampleCmd_StderrPipe() {
120 cmd := exec.Command("sh", "-c", "echo stdout; echo 1>&2 stderr")
121 stderr, err := cmd.StderrPipe()
122 if err != nil {
123 log.Fatal(err)
124 }
125
126 if err := cmd.Start(); err != nil {
127 log.Fatal(err)
128 }
129
130 slurp, _ := io.ReadAll(stderr)
131 fmt.Printf("%s\n", slurp)
132
133 if err := cmd.Wait(); err != nil {
134 log.Fatal(err)
135 }
136 }
137
138 func ExampleCmd_CombinedOutput() {
139 cmd := exec.Command("sh", "-c", "echo stdout; echo 1>&2 stderr")
140 stdoutStderr, err := cmd.CombinedOutput()
141 if err != nil {
142 log.Fatal(err)
143 }
144 fmt.Printf("%s\n", stdoutStderr)
145 }
146
147 func ExampleCommandContext() {
148 ctx, cancel := context.WithTimeout(context.Background(), 100*time.Millisecond)
149 defer cancel()
150
151 if err := exec.CommandContext(ctx, "sleep", "5").Run(); err != nil {
152
153
154 }
155 }
156
View as plain text