作者热门文章
- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我想运行命令: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 -l
或 ls -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/
我是一名优秀的程序员,十分优秀!