- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我需要找到一种方法来从 io.ReadCloser 对象中读取一行,或者找到一种在“结束行”符号上拆分字节数组的方法。但是我不知道结束线符号,我找不到它。
我的应用程序执行一个 php 脚本,需要从脚本中获取实时输出,并在获取时对其进行“处理”。
这是我的一小段代码:
cmd := exec.Command(prog, args)
/* cmd := exec.Command("ls")*/
out, err := cmd.StdoutPipe()
if err != nil {
fmt.Println(err)
}
err = cmd.Start()
if err != nil {
fmt.Println(err)
}
在此之后我监控 out
在 go 例程中缓冲。我试过两种方法。
1) nr, er := out.Read(buf)
其中 buf
是一个字节数组。这里的问题是我需要为每条新线制动阵列
2) 我的第二个选择是创建一个新的 bufio.reader
r := bufio.NewReader(out)<br/>
line,_,e := r.ReadLine()
如果我执行像 ls
这样的命令,它运行良好,我逐行得到输出,但是如果我执行一个 php 脚本,它会立即得到一个文件结束错误并退出(我猜这是因为 php 的延迟输出)
编辑:我的问题是我在 go 例程中创建了 bufio.Reader,而如果我在 StdoutPipe()
之后立即创建它正如 minikomi 所建议的那样,它工作正常
最佳答案
您可以使用 bufio 创建一个阅读器,然后阅读直到下一个换行符(注意,单引号表示字符!):
stdout, err := cmd.StdoutPipe()
rd := bufio.NewReader(stdout)
if err := cmd.Start(); err != nil {
log.Fatal("Buffer Error:", err)
}
for {
str, err := rd.ReadString('\n')
if err != nil {
log.Fatal("Read Error:", err)
return
}
fmt.Println(str)
}
如果您尝试在 goroutine 中读取读取器而没有停止脚本,它将退出。
关于go - 来自 io.ReadCloser 的 ReadLine,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13065010/
有人可以解释(或/和分享示例)何时以及为什么应该明确关闭读者,即实现 io.ReadCloser,而不仅仅是 io.Reader。 最佳答案 例如,当您使用文件或任何应关闭以释放分配的资源(或内存,例
我正在创建一个缓冲区,然后通过zip.NewWriter()写入该缓冲区 所以我的代码看起来像这样 // Create a buffer to write our archive to. buf :=
我总是被 io.ReadCloser 困住,然后忘记我以前读过它,当我再次阅读它时,我得到一个空的负载。我希望对我的愚蠢进行一些 lint 检查。尽管如此,我认为我可以使用 TeeReader,但它在
我从 http 服务获取数据,我想即时解压它。这是我目前的方法: resp, err := http.Get(url) if err != nil { logger.Fatalf("Can't
我有一个很大的 io.ReadCloser,它是从我的 HTTP 处理函数中的 http.Request 获得的。我需要将请求代理到另一台服务器,但首先我想在正文中找到与 Title: (\w+) 之
我有一个非常简单的 Go 网络服务器。它的工作是接收入站 json 有效负载。然后它将有效负载发布到一个或多个需要字节数组的服务。无需检查有效负载。刚发过来。 在这种情况下,它会接收入站作业并将其发送
我有一个 http 请求,我需要检查它的正文。但是当我这样做时,请求失败了。我假设这与需要重置的阅读器有关,但沿着 go ioutil reset ReadCloser 的行谷歌搜索没有发现任何看起来
我需要找到一种方法来从 io.ReadCloser 对象中读取一行,或者找到一种在“结束行”符号上拆分字节数组的方法。但是我不知道结束线符号,我找不到它。 我的应用程序执行一个 php 脚本,需要从脚
给定一个 io.ReadCloser,例如从 HTTP 请求的响应中,在内存开销和代码可读性方面将响应流式传输到文件的最有效方法是什么? 最佳答案 io.Copy在代码方面无疑是最高效的;你只需要 o
在 response.go 源代码的定义中,定义了 io.ReadCloser 类型的 Body但是在通过以下代码打印 Body 的类型时,它会打印 *http.http2gzipReader .他们
目标 我想将数据从阅读器发送到我的服务器。 (在示例中是 NopCloser,稍后它将是 exec.Command 的 Stdout) 问题 请求永远不会结束。即使我手动关闭 cmdOut,程序也永远
这个问题在这里已经有了答案: Golang io/ioutil NopCloser (3 个答案) 关闭 4 年前。 我有一个不需要关闭的 io.Reader: stringReader := st
我有一个客户端发出下载文件的请求,Web 服务器将此请求转发到实际保存该文件的资源服务器。从资源服务器返回的 *http.Response 有 Body io.ReaderCloser 从资源服务器流
我正在尝试从 S3 下载文件并将该文件上传到 S3 中的另一个存储桶。 Copy API 在这里不起作用,因为我被告知不要使用它。 从 S3 获取对象有一个 response.Body,它是一个 io
关闭。这个问题是not reproducible or was caused by typos .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 2年前关闭。 Imp
我似乎无法解决这个奇怪的错误。这是我的代码: resp, err := http.Get("example.com/my/text/file.conf") ... err = parseEvent(e
我是一名优秀的程序员,十分优秀!