当前位置: 首页 > 面试题库 >

如何通过os.Exec将stdout传输到文件和终端?

澹台文博
2023-03-14
问题内容

如何通过管道将os.Exec的stdout发送到文件,同时也发送到终端?

我已经试过了:

go func() {
    scanner := bufio.NewScanner(stdout)
    writer := bufio.NewWriter(logFile)
    for scanner.Scan() {
        log.Debugln(scanner.Text())
        writer.WriteString(scanner.Text())
    }
    writer.Flush()
}()

但是文件writer.WriteString(scanner.Text())丢失\n了。如何让他们回来?也许管道有一些更优雅的解决方案


问题答案:

使用参数os.Stdout和文件创建io.MultiWriter。将Cmd.Stdout设置为multiwriter。运行命令。

 cmd := exec.Command(name, args...)
 cmd.Stdout = io.MultiWriter(os.Stdout, file)
 err := cmd.Run()

如果要逐行写入log.Debugf和其他文件,请执行以下操作:

go func() {
    scanner := bufio.NewScanner(stdout)
    writer := bufio.NewWriter(io.MultiWriter(os.Stdout, file))
    for scanner.Scan() {
        log.Debugln(scanner.Text())
        writer.Write(scanner.Bytes())
        writer.WriteByte('\n')  // add line separator
    }
    writer.Flush()
}()

此代码假定输入中的行分隔符为\ n。



 类似资料:
  • 问题内容: 我在完全冻结JVM的应用程序中发现一个错误。产生的stacktrace将为开发人员提供有价值的信息,我想从Java控制台中检索它。JVM崩溃时,控制台被冻结,我无法再复制包含的文本。 是否可以将Java控制台直接通过管道传输到文件,或通过其他某种方式访问​​Java应用程序的控制台输出? 更新:我忘记提了,没有更改代码。我是手动测试仪。 更新2:这是在Windows XP下,它实际上是

  • 问题内容: 我有。我希望在运行时在终端中显示ddrescue并将输出写入文件drclog。我尝试使用,但这使我在ddrescue中输入错误。 问题答案: 如果将其stdout / stderr重定向到管道时仍不更改其输出,则可以使用实用程序在终端上显示输出并将其保存到文件中: 如果确实如此,那么您可以尝试使用实用程序提供一个伪tty : 如果它直接写入终端,则可以用来捕获输出: 默认情况下,输出保

  • 问题内容: 如何在Java中通过SFTP传输文件? 我想要SFTP客户端的示例代码。我想将SFTP服务器嵌入到我的应用程序中,并且客户端应该能够将文件发送到我的应用程序。 PS:这是要求SFTP客户端。这个问题不是其他两个问题的重复。 找到以下链接以实现SFTP。 https://codetransient.wordpress.com/2019/06/22/sftp-secured-file-tr

  • 我正在尝试通过ACTION\u SEND intent将文件上载到webview应用程序。如果他们选择在应用程序中使用openFileChooser上传文件,我已经可以使用它了,但我需要它在他们单击文档或画廊应用程序中的共享时工作。所以,我非常需要绕过openFileChooser,因为已经选择的文件及其Uri在我的意图中,我只需要实际上传它。我想重蹈openFileChooser的覆辙,但不知道

  • 我试图移动一些文件从存储目录到远程服务器"BOB"使用jcifs SMB.我需要使用jcifs,因为移动通过和Android应用程序,即。我正在将照片从应用程序移动到远程服务器。为了验证为用户,我的公司使用Active Directory。有一段时间,Active Directory和照片所在的服务器是同一个服务器,一切都很好。不幸的是,他们不得不将存储Active Directory的服务器更改

  • 我在API网关中创建了一个API,用于将音频文件上载到s3,该文件作为多部分/表单数据从本地PC发送。 API集成请求如下所示 在URL路径参数中,添加bucket作为param,直接添加bucket名称 当我尝试上载文件时,收到错误响应, 需要做哪些更改?