流式执行 exec.Command StdoutPipe

2024-04-01

我正在尝试将 shell 命令的标准输出流式传输到控制台,但遇到困难。

这是我目前拥有的:

cmd := exec.Command("sh", "-c", `for number in {0..10}; do echo "$number "; done;`)
pipe, _ := cmd.StdoutPipe()
reader := bufio.NewReader(pipe)
line, err := reader.ReadString('\n')
for err == nil {
    fmt.Println(line)
    line, err = reader.ReadString('\n')
}

我希望它打印出数字 0 到 10,但它似乎挂在第 3 行(第一次调用ReadString.

我开始于cmd.Output() and cmd.CombinedOutput(),但这些方法似乎会缓冲整个输出流,直到命令完成。我需要在输出流时处理输出,而不是等到命令完成。

我也尝试过这个:连续读取 exec.Cmd 输出 https://stackoverflow.com/questions/43635611/continuously-reading-from-exec-cmd-output,但它似乎不起作用,我放弃了它,因为我真的想读取行,而不必手动管理缓冲区。

我看过的其他事情:

  • https://groups.google.com/forum/#!topic/golang-nuts/0xK_IHbHPUU https://groups.google.com/forum/#!topic/golang-nuts/0xK_IHbHPUU
  • https://golang.org/pkg/os/exec/ https://golang.org/pkg/os/exec/
  • https://golang.org/pkg/bufio/ https://golang.org/pkg/bufio/

你需要start https://godoc.org/os/exec#Cmd.Start命令:

cmd := exec.Command("sh", "-c", `for number in {0..10}; do echo "$number "; done;`)
pipe, _ := cmd.StdoutPipe()
if err := cmd.Start(); err != nil {
   // handle error
}
reader := bufio.NewReader(pipe)
line, err := reader.ReadString('\n')
for err == nil {
    fmt.Println(line)
    line, err = reader.ReadString('\n')
}

Call Wait https://godoc.org/os/exec#Cmd.Wait达到EOF后。

Output 和 CombinedOutput 方法对您有用,因为这些方法在内部调用 Start。

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

流式执行 exec.Command StdoutPipe 的相关文章

  • 如何在shell脚本中读取单个字符

    我想要类似的选项getche 如何从命令行读取单个字符输入 Using read命令我们可以做到吗 在巴什中 read可以做到 read n1 ans
  • 在多个文件中进行查找/替换的最佳方法?

    最好的方法是什么 我不是命令行战士 但我想可能有一种使用方法grep and cat 我只想替换文件夹和子文件夹中出现的字符串 最好的方法是什么 如果这很重要的话 我正在运行 ubuntu 我将为使用的人提供另一个例子ag 银色搜索者 ht
  • Golang Appengine 项目无法构建

    我有一个使用 golang 的应用程序引擎项目 我已经大约一年没有碰过了 我现在无法让它在之前构建的机器上构建 我收到以下错误 go app builder 解析输入失败 解析器 src golang org x net internal
  • linux + ksh + 向下舍入或向上舍入 - 浮点数

    在我的 ksh 脚本中 我只需要计算整数 有时我会得到浮点数 例如 3 49 或 4 8 等 所以我需要根据以下规则将浮点数转换为整数 示例 3 49 will be 3 2 9 will be 3 4 1 will be 4 23 51
  • 拼写检查 shell 脚本

    我有一些疑问 我对一个应该是简单拼写检查器的脚本有疑问 它的目的是 当发现错误的单词时 它会提示用户输入该单词的正确拼写 如果用户输入正确的拼写 则会显示更正的单词以及错误的单词 下面 在读完所有单词之后 但是 如果用户只是按 Enter
  • 何时用引号将 shell 变量括起来?

    我应该或不应该在 shell 脚本中用引号括住变量吗 例如 下列说法正确的是 xdg open URL eq 2 or xdg open URL eq 2 如果是这样 为什么 一般规则 如果它可以为空或包含空格 或实际上任何空格 或特殊字符
  • 如何将未知字段类型的数据解组为 JSON

    我有这些 结构 type Results struct Gender string json gender Name struct First string json first Last string json last json nam
  • 如何获取与 shell 中的文件名模式匹配的所有文件的总文件大小?

    我正在尝试仅使用 shell 来计算与文件名模式匹配的所有文件 在目录树中 的总大小 以字节为单位 这是我到目前为止所拥有的 find name undo exec stat c s awk 总计 1 END 打印总计 有没有更简单的方法来
  • Git - 显示远程分支的远程名称

    是否有一个 Git 命令可以显示远程分支的远程名称 目前 我坚持使用 shell utils 从远程分支引用中提取远程名称 例如 echo remote name branch name sed r s 1 remote name 有时出于
  • 投射回更专业的界面

    我正在用 Go 编写一个游戏 在 C 中 我将所有实体类存储在 BaseEntity 类的数组中 如果一个实体需要在世界中移动 那么它将是一个从 BaseEntity 派生的 PhysEntity 但添加了方法 我尝试模仿这是 go pac
  • 在函数中将通道作为参数传递的不同方法

    我正在阅读一些Go代码 并说了几种传递Go通道的不同方法 也许它们是相同的 但我想知道是否有任何区别 因为我无法在线找到文档 1 func serve ch lt chan interface do stuff 2 func serve c
  • 在 IntelliJ IDEA 中运行。多个文件和错误未定义:数据

    我想使用 IntelliJ IDE 社区版编写代码GO Go语言 我安装了正确的插件 并安装了构建应用程序所需的所有工具 我的应用程序包含以下两个文件 每个都在目录中 事件服务器 Main go Data go 如果我想使用 Run Ctl
  • 我可以根据我正在构建的操作系统导入 Golang 包吗?

    假设我有一个基于哪个操作系统的 go 项目 在某些情况下是哪个发行版 我想使用 Systemd 客户端包 Upstart 客户端包 sysv 客户端包 launchd 客户端包 是否可以有选择地导入每个包 以便我只导入我正在构建的每个操作系
  • BASH:输入期间按 Ctrl+C 会中断当前终端

    我的 Bash 版本是 GNU bash version 4 3 11 1 release x86 64 pc linux gnu 我有一段这样的代码 while true do echo n Set password read s pas
  • unix 下日期字段排序

    我有包含数十万条记录的文本文件 其中一个字段是日期字段 有没有办法根据日期字段对文件进行排序 09 APR 12 04 08 43 632279000 AM 19 MAR 12 03 53 38 189606000 PM 19 MAR 12
  • VBA Shell 并等待退出代码

    我正在打包一个办公应用程序 VBA 它调用 C 控制台应用程序来执行应用程序 大型模拟程序 的一些繁重工作 我希望能够让 VBA 应用程序等待控制台应用程序完成并从控制台应用程序检索退出代码 我已经能够做到前者 但尚未能够从应用程序中检索退
  • 错误“binary.Write:无效类型”是什么意思?

    下面显示的代码 我创建了一个结构类型并希望将其编码为二进制 但它显示binary Write invalid type main Stu错误 我读过一些类似的代码 但我找不到为什么我的代码不起作用 type Stu struct Name
  • 在压缩存档内的文本文件上运行“head”,而不解压存档

    问候 我接手了之前的团队并编写了处理 csv 文件的 ETL 作业 我在 ubuntu 上结合使用 shell 脚本和 perl csv 文件很大 它们以压缩档案形式到达 解压后 很多都超过 30Gb 是的 那是 G 旧进程是在 cron
  • 在 bash 中添加(收集)退出代码

    我需要依赖于脚本中的几个单独的执行 并且不想将它们全部捆绑在一个丑陋的 if 语句中 我想使用退出代码 每次执行并添加它 最后 如果这个值超过阈值 我想执行一个命令 伪代码 ALLOWEDERROR 5 run something RESU
  • 使用覆盖率信息测试 Go 中的 os.Exit 场景 (coveralls.io/Goveralls)

    这个问题 如何在 Go 中测试 os exit 场景 https stackoverflow com questions 26225513 how to test os exit scenarios in go 以及其中得票最高的答案 列出

随机推荐

  • 如何使用 SQL Server 从当前日期减去 30 天

    我无法从当前日期减去 30 天 而且我是 SQL Server 的新手 这是我专栏中的数据 date Fri 14 Nov 2014 23 03 35 GMT Mon 03 Nov 2014 15 18 00 GMT Tue 11 Nov
  • 测量 Javascript 应用程序的 CPU 负载

    我需要测量额外的 Javascript 事件绑定 使用 jQuery live 的性能开销 该开销可能会增加 CPU 负载 并且很难从执行时间分析中注意到 如何测量 Javascript 应用程序的两个不同版本之间的 CPU 负载差异 分析
  • Process.Start cmd.exe 在 IIS 中运行时不会运行作为参数传递的 cmd 文件

    我整个早上都在寻找和试验这个 但我被难住了 我有一个在 IIS 中运行的 aspx 页面并调用以下 c 函数 我试图让它运行 cmd 文件并返回 cmd 文件的输出 我在下面的代码中尝试了五个不同的选项 protected String R
  • 渲染谷歌折线图,曲线类型未设置且动画未按预期工作

    我正在绘制谷歌折线图 效果很好 该图表使用正确的数据绘制 但是 当我更改 curveType 的选项时 函数 选项不会将图表从直线更改为曲线 此外 动画功能根本不执行任何操作 我在这里错过了什么吗 这是我的代码 google charts
  • MUI v5 - 将组件名称添加到“样式”类名称中?

    我在 github 和这里进行了一些搜索 但也许我的做法是错误的 Using styled from mui material styles生成随机类名 如下所示 const TitleWrapper styled div display
  • Android 中整个应用程序的选项菜单?

    我可以为单个活动创建一个选项菜单 但现在我想在菜单中创建一个注销选项 该选项应该在应用程序中的所有活动中可用 有没有可能为应用程序创建一次选项菜单 我曾经回答过这个问题 但我忘了在哪里 所以我又来了 它非常简单 创建一个BaseActivi
  • “机器硬件”和“硬件平台”的区别

    我的 Linux 机器报告 uname a 输出如下 root tom i386 uname a Linux tom 2 6 9 89 ELsmp 1 SMP Mon Apr 20 10 34 33 EDT 2009 i686 i686 i
  • 将单列文本输入重新排列为多列

    我正在将 jTable 用于我目前正在进行的一个项目 想看看你们是否可以帮助解决我遇到的 CSS 问题 我在下面制作了一个 jsfiddle 当我向 jTable 添加新记录时会弹出该表单 因为我有很多行 所以它比可见屏幕长 您认为通过一些
  • 为什么 Git 中会忽略 IDE 特定的项目文件?

    我看到 Github 上发布的许多项目都有一个 gitignore文件明确排除与 IDE 相关的控制文件 这些控制文件广泛用于定义项目及其依赖项 这些可以是 sln对于 NET 或 project对于 Eclipse 我想问为什么这种做法被
  • Angular ngAnimate 在页面加载时第一次无法工作

    我正在使用 ngAnimate 除了页面加载后第一次之外 它的效果都很好 我有一些像这样的html a href newcontent a div class content div 使用路由单击链接时视图会更新 如下所示 app conf
  • 如何更改 Eclipse 项目的 JDK 版本

    我需要编写一个仅与 Java 1 5 兼容的项目 我安装了Java 1 6 是否有某种形式的向后兼容性可以让 Eclipse 使用 1 5 进行编译 我是否必须安装 Java 1 5 才能在此处显示 或者也许还有另一种方法 单击添加库按钮
  • 将 d3-tip 与 npm 一起使用:“未捕获类型错误:无法读取未定义的属性‘节点’”?

    我已经安装了d3 3 5 17 and d3 tip 0 7 1 使用 npm d3 tip 文档 https www npmjs com package d3 tip 然后在我的index js文件我有这个代码 var d3 requir
  • 用于翻译的 MySQL 结构

    根据这种方法 默认语言是已经翻译了在第一个表中 如果用户不需要翻译 他就不会为之烦恼 只需连接主表 仅此而已 产品表 InnoDB Obj id PK name desc 1 Million Dollar Baby Short descri
  • 在 Oracle 11g 中如何将分区表从一个表空间移动到另一个表空间?

    我有一个属于表空间的分区表report 我想将它移动到表空间record反而 一种可能性是删除表并在新表空间中重新创建它 但这对我来说不是一个选择 因为表中的数据需要在移动后继续存在 我首先检查分区是否确实属于表空间报告 SELECT FR
  • Symfony 2:如何渲染没有日期的日期字段?

    我正在尝试构建带有日期字段的表单 其中用户只能选择月份和年份 没有月份中的某一天 但我不知道如何实现这一点 public function buildForm FormBuilderInterface builder array optio
  • 停止加载 iframe

    所以我有 iframe 并且我正在通过它上传文件 所以我的问题是如何在加载过程中停止它 我尝试使用 jquery 函数更改 srcattr 但我没有做任何好事 我正在考虑删除整个 iframejs但这会给我带来其他问题 我什至不确定它是否有
  • 为什么排序(Comparator::reverseOrder)不起作用?

    下面的 Stream 表达式工作得很好 Stream
  • Itextsharp:导入页面时有没有办法复制链接?

    我正在开发一个项目 需要在显示 pdf 之前对其进行编辑 I need 添加水印 编辑权限 锁定以避免 复制 粘贴 和 另存为 编辑观众偏好 我做到了 并且工作正常 除了一件事 原始文件中的链接在新文件中不起作用 有什么想法吗 注意 实际上
  • 重命名 Identity 表并导致 EF6 迁移失败

    我正在尝试通过 EF6 Package Manager 中的迁移工具重命名我的 Identity 2 0 表 然而 它已经炸毁了一部分 我只是在 IdentityModels cs 中的 ApplicationDBContext Creat
  • 流式执行 exec.Command StdoutPipe

    我正在尝试将 shell 命令的标准输出流式传输到控制台 但遇到困难 这是我目前拥有的 cmd exec Command sh c for number in 0 10 do echo number done pipe cmd Stdout