gpt4 book ai didi

go - 如何在不将结果输出到终端的情况下重定向 Go 中的命令?

转载 作者:IT王子 更新时间:2023-10-29 02:30:24 25 4
gpt4 key购买 nike

我想运行命令:pbcopy < file.csv在我的 Go 程序中。然而,它看起来像 Go 的 os/exec程序包无法使用 < 将一个命令重定向到另一个命令句法。所以我决定在我的程序中使用管道。然而,这个脚本:

package main

import (
"os/exec"
)

func main() {
cmd1 := exec.Command("cat", "test.csv")
cmd2 := exec.Command("pbcopy")
out, _ := cmd1.StdoutPipe()
cmd2.Stdin = out
cmd2.Run()
}

当我运行上面的程序时,程序并没有终止,它看起来像是在等待终端中用户的输入。当我终止它并尝试将结果粘贴到任何地方时,它不会接受输入并将其保存到剪贴板。

然后我将程序的最后一行从 cmd2.Run() 更改为至 cmd2.Start() ,然后程序正常终止。但是,剪贴板中填满了一个空字符串并且不保存 cat file.csv。输出到剪贴板。

我试图在 os.exec 中寻找一些使用管道的示例在 Go 中,但我看到的所有这些都假设结果最终输出到终端,例如 ls -l | wc -lls -l | grep "py"或者这样的事情。但是pbcopy命令不显示输入,只是将输入保存到剪贴板。

那么我如何在 os.exec 中使用重定向(或管道) Go 中的包 pbcopy命令?

最佳答案

您需要启动命令 1。命令 2 正在等待命令 1 的输入,并且可能会无限期地等待。

cmd1.Start()
cmd2.Run()

编辑:回顾这个问题,你为什么首先将其作为两个命令来执行?相反,您可以 os.Open("test.csv") 并将文件指针直接传递给 cmd2.Stdin

关于go - 如何在不将结果输出到终端的情况下重定向 Go 中的命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23332384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com