流式执行 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 的相关文章

  • git 别名中的 AWK 语句

    我正在尝试创建一个 git 别名来以特定格式打印日志中的所有拉取请求 但是 我在使用 AWK 删除双空格时遇到问题 这是使用以下命令的 git log 的输出 git log merges grep pull request pretty
  • 通过powershell运行ADB命令

    所以我尝试通过 powershell 脚本运行一些 ADB 命令 这是我正在尝试做的一个简单示例 adb shell echo in adb shell su root echo you are now root ls cd data da
  • 如何使信号量超时

    Go 中的信号量是通过通道来实现的 一个例子是这样的 https sites google com site gopatterns concurrency semaphores https sites google com site gop
  • chown:不允许操作

    我有问题 我需要通过 php 脚本为系统中的不同用户设置文件所有者权限 所以我通过以下命令执行此操作 其中 1002 是系统的用户 ID file put contents filename content system chown 100
  • if [ -z "${FILE_LIST}" ] 中的 -z 是什么

    遇到了这个 什么是 z在 shell 脚本中if z FILE LIST 是相同的test And man test gives z STRING the length of STRING is zero 注意 在某些平台上 是一个符号链接
  • 将 time.Time 转换为字符串

    我正在尝试将数据库中的一些值添加到 string在围棋中 其中一些是时间戳 我收到错误 无法在数组元素中使用 U Created date 类型 time Time 作为类型字符串 我可以转换吗time Time to string typ
  • 为什么 json.Unmarshal 返回映射而不是预期的结构?

    看看这个游乐场 http play golang org p dWku6SPqj5 http play golang org p dWku6SPqj5 基本上 我正在工作的图书馆收到了interface 作为参数 然后需要json Unma
  • 如何在数组中存储包含双引号的命令参数?

    我有一个 Bash 脚本 它生成 存储和修改数组中的值 这些值稍后用作命令的参数 对于 MCVE 我想到了任意命令bash c echo 0 0 echo 1 1 这解释了我的问题 我将用两个参数调用我的命令 option1 without
  • OSX bash 最小化窗口

    在 Mac 中并使用 bash shell 我想执行一个包含单个命令 启动 Jupyter Lab 的文件并立即最小化终端窗口 有没有办法在不安装第三方软件的情况下做到这一点 是的 只需使用osascript https ss64 com
  • 直接从一个通道发送到另一个通道

    当从一个通道直接发送到另一个通道时 我偶然发现了令人惊讶的行为 package main import fmt func main my chan make chan string chan of chans make chan chan
  • sed 错误“未终止的 's' 命令”故障排除

    我正在构建一个script https stackoverflow com questions 4036832 replacing a specific term in an xml file其中 它将用文件夹路径替换 XML 文件中的模式
  • 如何通过保持目录结构完整来同步路径中匹配模式的文件?

    我想将所有文件从服务器 A 复制到服务器 B 这些文件在不同级别的文件系统层次结构中具有相同的父目录名称 例如 var lib data sub1 sub2 commonname filetobecopied foo var lib dat
  • 在 Visual Studio Code 中调试 Go 测试

    在我的 Windows 计算机上 我安装了 Visual Studio Code 要手动运行测试 我进入控制台到项目文件夹并输入 go test main test go 它工作完美 但我遇到一种情况 我需要调试我的测试以了解发生了什么 为
  • shell-out 值到 md5(加密)函数

    我正在寻找一种解决方案 我正在构建 JSON 记录 并需要在 JQ 中生成一些文本 但将此文本通过管道传输到 MD5 求和函数并将其用作键的值 echo first John last Big jq id first last md5 通过
  • 当 grep "\\" XXFile 我得到“尾随反斜杠”

    现在我想查找是否有包含 字符的行 我试过grep XXFile但它暗示 尾随反斜杠 但当我尝试时grep XXFile没关系 谁能解释一下为什么第一个案例无法运行 谢谢 区别在于 shell 处理反斜杠的方式 当你写的时候 在双引号中 sh
  • 通过 sed 使用 unix 变量将数据附加到每行末尾[重复]

    这个问题在这里已经有答案了 我有一个文件 我想使用 SED 将值附加到每行末尾的 unix 变量中 我已经通过 AWK 实现了这一点 但我想在 SED 中实现 像这样的东西 我已经尝试过以下命令 但它不起作用 sed i s BATCH R
  • 符合 POSIX 标准的 shell 相当于 Bash“while read -d $'\0' ...”?

    我正在尝试使 Bash 脚本严格符合 POSIX 标准 即消除任何潜在的 Bashisms http mywiki wooledge org Bashism 通过使用checkbashisms px script filename 在给定的
  • 什么时候返回结构体指针是个好主意?

    我正在学习 Go 我对何时使用指针有点困惑 具体来说 当返回一个struct从函数中 什么时候适合返回结构体实例本身 什么时候适合返回指向结构体的指针 示例代码 type Car struct make string model strin
  • 如何将所有GET请求查询参数放入Go中的结构体中?

    你好 我想将 get 查询参数转换为 Go 中的结构 例如我有这样的结构 type Filter struct Offset int64 json offset Limit int64 json limit SortBy string js
  • golang.org 包和标准库之间的区别

    我使用 go 已经有一段时间了 我注意到 Go 标准库 和 golang org x 之间存在重复的包 我的问题是 为什么它们被释放两次 在这两者中 我应该使用哪一个 更新的 规范的等 到目前为止我注意到的一些示例包已发布两次 golang

随机推荐

  • 如何使用 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