在cmd终端中执行命令和在golang中执行cmd命令的两个不同结果。
cmd
C:\Users\Administrator>cmd /c tasklist | findstr /R /I "\<cmd.exe\>"
cmd.exe 4852 Console 1 5,676 K
cmd.exe 11736 Console 1 4,836 K
戈朗
func main() {
cmd := exec.Command("cmd.exe", "/C", "tasklist", "|", "findstr", "/R", "/I", "cmd.exe")
output, err := cmd.Output()
if err != nil {
panic(err)
}
fmt.Println(string(output))
// Use regular filtering
cmd2 := exec.Command("cmd.exe", "/C", "tasklist", "|", "findstr", "/R", "/I", "\\<cmd.exe\\>")
output, err = cmd2.Output()
if err != nil {
panic(err)
}
fmt.Println(string(output))
}
result:
C:\Users\Administrator\AppData\Local\Temp\GoLand\___go_build_demo_go.exe
cmd.exe 4852 Console 1 5,380 K
cmd.exe 11816 Console 1 5,044 K
panic: exit status 1
发布于 2022-09-03 16:45:25
感谢您的好意答复。最后,我以这样的方式解决了这个问题:
cmd := exec.Command("cmd.exe", "/C", "tasklist", "|", "findstr", "/R", "/I", "cmd.exe")
output, _ := cmd.Output()
fmt.Println(string(output))
//***************************************************************************//
cmd1 := exec.Command("cmd.exe", "/C", "tasklist")
cmd2 := exec.Command("findstr", "/R", "/I", "\\<cmd.exe\\>")
cmd2.Stdin, _ = cmd1.StdoutPipe()
cmd1.Start()
data, _ := cmd2.Output()
cmd1.Wait()
fmt.Println(string(data))
result:
Result of regular expression not used
cmd.exe 5188 Console 1 6,184 K
cmdcmd.exe 1260 Console 1 4,980 K
Results of using regular expressions
cmd.exe 5188 Console 1 6,184 K
虽然第二种方式有点麻烦,但它确实很有用。我想知道是否有更好的方法?
https://stackoverflow.com/questions/73583430
复制相似问题