当我们编写应用程序时,可能会需要调用其他程序并获取它们的输出。Go和Python都提供了方便调用其他程序并获取输出的方法,这可以帮助我们实现更为复杂的功能。
Go
在Go中,可以使用os/exec包调用其他程序并获取它们的输出。下面是一个简单的示例:
package main
import (
"fmt"
"os/exec"
)
func main() {
cmd := exec.Command("ls", "-l")
output, err := cmd.Output()
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(output))
}
上述代码调用了ls程序,并传递了-l参数。程序执行后,输出结果将被存储在output变量中,并作为字符串输出。
另一个示例是使用管道将调用结果传递给其他进程:
package main
import (
"fmt"
"os/exec"
"strings"
)
func main() {
cmd1 := exec.Command("ls", "-l")
cmd2 := exec.Command("grep", "go")
output1, err := cmd1.StdoutPipe()
if err != nil {
fmt.Println(err)
return
}
output2, err := cmd2.StdinPipe()
if err != nil {
fmt.Println(err)
return
}
cmd2.Stdout = os.Stdout
cmd1.Start()
go cmd2.Start()
go func() {
defer output2.Close()
defer cmd2.Wait()
output2.Write([]byte("something\n"))
}()
output1Bytes, _ := ioutil.ReadAll(output1)
lines := strings.Split(string(output1Bytes), "\n")
for _, line := range lines {
fmt.Println("output1:", line)
}
cmd1.Wait()
}
上述代码调用了ls程序,并将其输出管道传递给grep程序以过滤出包含"go"的行。最终结果将作为字符串输出。
Python
在Python中,可以使用subprocess模块调用其他程序并获取它们的输出。
import subprocess
def run_command(command):
process = subprocess.Popen(command,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)
output, error = process.communicate()
return output.decode('utf-8')
result = run_command('ls -l')
print(result)
上述代码调用了ls程序,并传递了-l参数。程序执行后,输出结果将被作为字符串输出。
另一个示例是使用管道将调用结果传递给其他进程:
import subprocess
grep = subprocess.Popen("grep go", stdin=subprocess.PIPE, stdout=subprocess.PIPE, shell=True)
ls = subprocess.Popen(["ls", "-l"], stdout=subprocess.PIPE)
output = ls.stdout
while True:
line = output.readline()
if not line:
break
grep.stdin.write(line)
grep.stdin.close()
print(grep.stdout.read().decode('utf-8'))
上述代码调用了ls程序,并将其输出管道传递给grep程序以过滤出包含"go"的行。最终结果将作为字符串输出。
无论使用Go还是Python,调用其他程序并获取输出都是非常简单的。管道机制可以帮助我们将结果传递给其他进程进行处理。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:go和python调用其它程序并得到程序输出 - Python技术站