Golang管道子命令实时输出

2024-01-28

我正在尝试通过管道传输命令的输出,但在写入端关闭之前似乎不会从管道中读取任何数据。最终我希望它连接到一个 websocket,该 websocket 在命令执行时流式传输命令的状态。问题是,虽然此代码逐行打印消息,但在程序执行完毕之前它不会打印任何内容。

cmd := exec.Command(MY_SCRIPT_LOCATION, args)

// create a pipe for the output of the script
// TODO pipe stderr too
cmdReader, err := cmd.StdoutPipe()
if err != nil {
    fmt.Fprintln(os.Stderr, "Error creating StdoutPipe for Cmd", err)
    return
}

scanner := bufio.NewScanner(cmdReader)
go func() {
    for scanner.Scan() {
        fmt.Printf("\t > %s\n", scanner.Text())
    }
}()

err = cmd.Start()
if err != nil {
    fmt.Fprintln(os.Stderr, "Error starting Cmd", err)
    return
}

err = cmd.Wait()
if err != nil {
    fmt.Fprintln(os.Stderr, "Error waiting for Cmd", err)
    return
}

有什么方法可以做类似的事情,让扫描仪在写入管道时实际逐行读取,而不是在所有内容都写入之后?该程序运行大约需要 20 秒,并且有源源不断的更新,因此一次性全部完成会很烦人。


事实证明,问题不在我上面发布的代码中。这按预期工作。问题是正在执行的 C 程序没有正确刷新stdout。当以交互方式运行它时,它按预期工作,但是当stdout是通过管道传输的,直到我打电话之前它实际上不会被写入flush。在c程序中手动添加一些flush语句后,go代码按预期工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Golang管道子命令实时输出 的相关文章

  • 使用 crypto/ssh 的 golang scp 文件

    我正在尝试通过 ssh 下载远程文件 以下方法在 shell 上运行良好 ssh hostname tar cz opt local folder gt folder tar gz 然而 golang 上的相同方法在输出工件大小方面存在一些
  • Golang 按位运算以及一般字节操作

    我有一些 C 代码 可以对字节执行一些按位运算 我正在尝试在 golang 中做同样的事情 但遇到了困难 C 中的示例 byte a c byte data int j c data j c byte c j c a c 0xFF c 0x
  • 在 IntelliJ IDEA 中运行。多个文件和错误未定义:数据

    我想使用 IntelliJ IDE 社区版编写代码GO Go语言 我安装了正确的插件 并安装了构建应用程序所需的所有工具 我的应用程序包含以下两个文件 每个都在目录中 事件服务器 Main go Data go 如果我想使用 Run Ctl
  • 完全删除使用“go get”安装的软件包?

    我正在使用 Go 1 13 1 最新版本 我正在尝试完全删除我安装的软件包go get来自 GitHub 这go clean i
  • 在 Go 中使用电子邮件地址创建证书签名请求 (CSR)

    我尝试使用 crypto x509 包生成 CSR 但没有找到将 emailAddress 字段添加到其主题中的方法 根据文档证书申请 http golang org pkg crypto x509 CertificateRequest结构
  • Go 无法推断赋值中的类型:“non-name on left side of :=”

    该片段按预期工作play golang org p VuCl OKMav http play golang org p VuCl OKMav i 10 next 11 prev i i next 然而这个几乎相同的片段给出了non name
  • 为什么 Go 中只有 int 而没有 float?

    在 Go 中 有这样的类型int这可能相当于int32 or int64取决于系统架构 我可以声明一个整数变量而不用担心它的大小 var x int 为什么没有这个类型float 这相当于float32 or float64取决于我的系统架
  • golang mongodb (mgo) 没有插入文档

    我在使用 mgo 在 mongodb 中保存 golang 结构时遇到问题 type AN Track Log struct Id bson ObjectId bson id omitempty user session id str st
  • bazel go_embed_data“无法嵌入”

    我将以下 bazel BUILD 配置为 gazelle name gazelle go embed data name static files srcs glob static package main var staticFS go
  • 与 Reflect.StructTag.Get 不兼容

    我当时在 Google Cloud 中工作 一切都很好 但是当我在 PC 中克隆所有项目时 每个 JSON 结构中都有此消息 结构体字段标签bson edad json edad omitempty 与reflect StructTag G
  • 使用 StructScan 将 postgresql 数组获取到结构中

    测试数据 CREATE TABLE test id int data text INSERT INTO test id data VALUES 1 a b c 去代码吧 第一个 一个运行良好的 func main db sqlx Open
  • Golang HTTP Post 错误:连接被拒绝

    我正在尝试向正在运行 PHP 应用程序的端口 8080 上的本地主机发送 post 请求 卷曲效果很好 curl data key asdf http localhost 8080 但在 Go 中我收到以下错误 Post http loca
  • 使用ticker定期从经常变化的路径加载内存中的所有文件?

    我有一个应用程序需要从两个不同的路径读取文件 读取所有这些文件后 我需要将它们加载到内存中products map Path Full 这是内存中服务器启动期间需要加载的所有文件的路径 该路径将包含大约 50 个文件 每个文件大小约为 60
  • 如何通过map[string]interface{}递归迭代

    我遇到了一个问题 如何在附加条件下递归地迭代 map string interface 1 如果一个值是一个映射 递归调用该方法 2 如果一个值是一个数组 调用数组的方法 3 如果一个值不是一个映射 处理它 现在当方法尝试执行时doc th
  • Golang SSL TCP套接字证书配置

    我正在创建一个 Go TCP 服务器 不是 http s 并且尝试将其配置为使用 SSL 我有一个 StartCom 免费 SSL 证书 我正在尝试使用它来完成此任务 我的服务器代码如下所示 cert err tls LoadX509Key
  • 如何退出执行延迟调用的 go 程序?

    我需要使用defer释放手动创建的分配C图书馆 但我还需要os Exit在某个时刻具有非 0 状态 棘手的部分是os Exit跳过任何延迟指令 package main import fmt import os func main defe
  • 使用指针接收器调用函数的 Go 语法

    在Go中 如果我定义一个带有指针的函数作为接收者 它是否应该只允许从指针调用该函数 为什么从值本身调用这个函数就可以 并且有同样的效果 例如 在以下程序中 m1 reset 和 m2 reset 具有相同的效果 即使 m1 是一个值而 m2
  • Go中通过反射给struct成员赋值

    我有一个结构 v 其中包含成员 A B C 字符串 使用反射 我可以获得字段的名称及其值 typ v Type for i 0 i lt v NumField i gets us a StructField fi typ Field i f
  • 如何从 gorm 中的模型获取表名?

    是否可以获得模型的表名 我发现可以从模型结构但我不知道如何正确地做到这一点 我没有找到该结构的任何初始化 user User tableName db 对于 Gorm v2 根据https github com go gorm gorm i
  • 如何在Go包之间共享测试接口?

    Go 不会在不同包的测试文件之间共享代码 因此测试接口的定义不会自动重用 在实践中我们如何解决这个问题 使用示例testing quick foo foo go package foo type Thing int const X Thin

随机推荐

  • 如何构造 LINQ to Entities 查询来直接加载子对象,而不是调用 Reference 属性或 Load()

    我是使用 LINQ to Entities 或实体框架 无论他们如何称呼它 的新手 我正在编写很多这样的代码 var item from InventoryItem item in db Inventory where item ID id
  • 如何使用 xsl-fo 和 apache fop 0.95 显示固定图像高度和宽度

    我正在尝试修复使用 fop 0 95 生成的 pdf 中图像的高度和宽度 这是用于它的代码
  • Nexus 6P 上硬件传感器的 Android 采样率变化

    我正在开发一个 Android 应用程序 用于研究 并且正在读取多个传感器数据 例如加速度计 陀螺仪 气压计等 所以我有 4 台 Nexus 6P 设备 全部配备最新版本工厂形象 https developers google com an
  • 到底是什么决定了 JavaScript 模块在 .html 中的执行顺序?

    我读到了首先加载最先出现的模块 https javascript info import export 这不是真的 在我回答这个问题之前 我了解到 首先执行没有导入的模块 叶模块 导入的模块只有在其导入的模块执行后才会执行 这让我能够解释这
  • 将 SQL STATISTICS TIME 和 IO 捕获到表中

    有没有办法捕捉STATISTICS IO and TIME在 T SQL 中 用于登录表 Sort of 与给出的统计数据相同SET STATISTICS TIME由查询统计 DMV 捕获 sys dm exec query stats h
  • 下一个更高/更低的 IEEE 双精度数

    我正在做高精度的科学计算 在寻找各种效果的最佳表示时 我不断想出想要获得下一个更高 或更低 可用双精度数的理由 本质上 我想要做的是将 1 添加到 double 的内部表示中的最低有效位 困难在于 IEEE 格式并不完全统一 如果要使用低级
  • 如何在反应传单中制作椭圆形?

    我想在反应传单中制作一个椭圆形 我已经检查过这个问题如何在react leaflet中制作一个椭圆形 https stackoverflow com questions 49089011 how can one make an ellips
  • Lombok 和 Jackson - 冲突/不明确的属性名称定义

    我收到一条警告消息 com fasterxml jackson databind JsonMappingException Conflicting ambiguous property name definitions implicit n
  • 使用随机森林的 AUC 基特征重要性

    我正在尝试使用随机森林和逻辑回归来预测二元变量 我的类别严重不平衡 Y 1 的大约 1 5 随机森林中的默认特征重要性技术基于分类准确性 错误率 这已被证明对于不平衡类来说是一个不好的衡量标准 请参阅here http www biomed
  • 为 mac ruby​​ 开发设置 .emacs 文件

    我在 Mac 上的 emacs 中加载 ruby 模式时遇到困难 emacs 文件位于 emacs 我已经向其中添加了几个命令 许多命令是从该站点粘贴的 但似乎没有一个被加载 有什么建议吗 我不确定文件是否未加载或者命令语法错误 我所需要的
  • 抛出“std::out_of_range”实例后调用终止

    我绝对是编程初学者 我在构建以下代码时遇到此错误 error terminate called after throwing an instance of std out of range what vector M range check
  • 发行说明,有什么用? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • windows下修改ip地址的脚本

    我使用计算机通过以太网与硬件进行通信 为了与此设备通信 我将 IP 设置为 192 168 0 11 将子网掩码设置为 255 255 255 0 将 IPv4 的默认网关设置为 192 168 0 1 为了使用互联网 我通过控制面板选择
  • 如何将几何数据字段显示为文本

    我将 DELPHI 与 ADO 和 SQL Server 2014 一起使用 在我们的数据库表中 有一个用于几何数据的空间列 我们可以在该字段中读取和写入数据 更多信息如下 https learn microsoft com de de s
  • 找不到 ios 文档的 /var/mobile/applications 目录

    我正在尝试在连接到 xcode 的 iPad 设备上运行发布版本以进行调试 我不确定 但猜测当我这样做时 文档目录最终会出现在我的本地计算机上的某个位置 而不是在 iPad 上 就像我在没有 xcode 的情况下运行它时一样 我得到如下目录
  • 运行时动态选择方法;访客模式或反射的替代方案

    我正在开发一个小型游戏模板 其世界由如下节点组成 World Zone Cell Actor Actor Item Where a World可以包含多个Zone物体 一个Zone可以包含多个Cell对象等 其中每一个都实现了Node接口
  • perl 如何将字符串转换为日期时间?

    我尝试在 perl 中将字符串转换为日期 但出现错误 use strict use warnings use DateTime use Date Manip my date ParseDate 20111121 print today is
  • 服务工作线程不从缓存返回文件

    我正在尝试使用 Service Worker 缓存单页 Web 应用程序 它应该从缓存中获取所有文件 并仅在发布新的服务工作线程版本时更新该缓存 使用预缓存功能 我将一些文件写入缓存 如下所示 function precache retur
  • 如何区分 .Net 中的单击和双击?

    我想重写 OnMouseClick 和 OnMouseDoubleClick 并根据使用的单击样式执行不同的操作 问题是单击和双击都会发生 OnMouseClick 并且在 OnMouseDoubleClick 之前被调用 我确信这一定是一
  • Golang管道子命令实时输出

    我正在尝试通过管道传输命令的输出 但在写入端关闭之前似乎不会从管道中读取任何数据 最终我希望它连接到一个 websocket 该 websocket 在命令执行时流式传输命令的状态 问题是 虽然此代码逐行打印消息 但在程序执行完毕之前它不会