例如,当我在Go代码中执行普通命令时,它可以正常执行并返回结果:ls -ls
// Error handling is omitted, in fact there is error handling in my code
func main() {
for {
var stdout bytes.Buffer
cmd := exec.Command("sh","-c","ls -ls")
cmd.Stdout = &stdout
cmd.Run()
fmt.Println(stdout.String())
}
}
执行结果如下:
[root@10-x-x-xx /root]# go run main.go
/usr/bin/sh -c ls -ls
stdout: total 8
4 -rw-r--r-- 1 root root 358 Aug 14 23:09 main.go
4 -rw-r--r-- 1 root root 167 Aug 14 16:07 temp.yaml
但是当我执行命令来启动新终端时(不确定我的理解是否正确),程序会正常返回,没有错误,没有输出,也没有跳转到新终端。
例如:。这是一个用于输入网络命名空间的命令。通常,它将返回到“#”并成功输入。nsenter -n --target PID
// Error handling is omitted, in fact there is error handling in my code
func main() {
for {
var stdout bytes.Buffer
cmd := exec.Command("sh","-c","nsenter -n --target 123")
cmd.Stdout = &stdout
cmd.Run()
fmt.Println(stdout.String())
}
}
程序在执行完成后退出,但实际上并不进入网络命名空间。
但是当我使用python时,没有这样的问题,它是可执行的。
import os
os.system("nsenter -n --target 24347")
或者另一个问题,如何在Go中编写代码,以便我可以执行此代码以ssh到其他主机,我觉得这似乎是同样的问题。
摇曳的蔷薇
相关分类