我使用以下有效的代码,问题是输出与进程完成执行时一样被打印,我想将输出实时打印到屏幕上,而在进程完成时不提供所有输出,我该如何实现?
cmdParams := [][]string{
{filepath.Join(dir,path), "npm", "install"},
{filepath.Join(pdir,n.path), "gulp"},
}
for _, cp := range cmdParams {
log.Printf("Starting %s in folder %s...", cp[1:], cp[0])
cmd := exec.Command(cp[1], cp[2:]...)
cmd.Dir = cp[0]
// Wait to finish, get output:
out, err := cmd.Output()
if err != nil {
log.Printf("Error running %s: %v\n", cp[1:], err)
return
}
log.Println("Finished %s, output: %s", cp[1:], out)
}
*尝试提出的解决方案时 *更新 ,我得到的输出像
2018/02/18 11:11:57 Starting [npm install] in folder ...
2018/02/18 11:12:14 adde
2018/02/18 11:12:14 d 56
2018/02/18 11:12:14 3 pa
2018/02/18 11:12:14 ckag
2018/02/18 11:12:14 es i
2018/02/18 11:12:14 n 15
2018/02/18 11:12:14 .477
2018/02/18 11:12:14 s
2018/02/18 11:12:14 Finished %s [npm install]
使用此答案中提供的解决方案:流命令输出进度
cmdParams := [][]string{
{filepath.Join(dir, path), "npm", "install"},
{filepath.Join(pdir, n.path), "gulp"},
}
for _, cp := range cmdParams {
log.Printf("Starting %s in folder %s...", cp[1:], cp[0])
cmd := exec.Command(cp[1], cp[2:]...)
cmd.Dir = cp[0]
stdout, err := cmd.StdoutPipe()
if err != nil {
log.Printf("%s cmd.StdoutPipe() error: %v\n", cp[1:], err)
return
}
// Start command:
if err = cmd.Start(); err != nil {
log.Printf("%s start error: %v\n", cp[1:], err)
return
}
// Stream command output:
scanner := bufio.NewScanner(stdout)
scanner.Split(bufio.ScanRunes)
for scanner.Scan() {
fmt.Print(scanner.Text())
}
if scanner.Err() != nil {
log.Printf("Reading %s stdout error: %v\n", cp[1:], err)
return
}
// Get execution success or failure:
if err = cmd.Wait(); err != nil {
log.Printf("Error running %s: %v\n", cp[1:], err)
return
}
log.Printf("Finished %s", cp[1:])
}
一些解释:
这行:
scanner := bufio.NewScanner(stdout)
创建一个bufio.Scanner
将从提供该进程写入的输出的管道读取的。
这行:
scanner.Split(bufio.ScanRunes)
指示扫描程序以rune
s代替默认行来读取输入。
请注意,上面的示例仅流式处理标准输出。如果您还需要标准错误流,也可以从阅读Command.StderrPipe()
。
还要注意,这不适用于某些命令不能将所有内容写入其标准输出或错误的命令。
问题内容: 我想编写一个函数,该函数将执行shell命令并以字符串形式返回其输出,无论是错误还是成功消息。我只想获得与命令行相同的结果。 能做到这一点的代码示例是什么? 例如: 问题答案: 这个问题的答案取决于你使用的Python版本。最简单的方法是使用以下功能: 该功能适用于仍在广泛使用的几乎所有版本的Python(2.7+)。2但对于较新的版本,不再推荐使用此方法。 现代版本的Python(3
问题内容: 我正在使用Groovy在我的Linux机器上执行命令并返回输出,但是我无法以某种方式使用管道(我认为),或者它可能没有在等待命令完成。 有什么问题或我的代码中缺少什么? 我的调用函数: 文件内容(更新:添加了exitVal println): 我的输出(更新:添加了exitVal值): 注意:我在内部使用。 问题答案: 您不能使用进行管道或重定向。这在Java中不起作用,因此在Groo
问题内容: 在node.js中,我想找到一种方法来获取Unix终端命令的输出。有什么办法吗? 问题答案: 那就是我现在正在工作的项目中这样做的方式。 示例:检索git用户
问题内容: 上面的代码是我的bash文件。这里有两个命令 创建txt文件 执行Docker容器 如果我运行此命令 在终端然后它正在工作 但是当我在crontab中运行时 那么只有txt文件创建有效,而docker容器无效。 问题答案: 使用伪tty并以交互方式运行的请求,但是cron不会附加到任何TTY。尝试删除在
我想使用OpenNLP来标记泰语单词。我下载了OpenNLP和Thai tokenize模型,并运行了以下程序 我将下载的放在我调用的目录中并运行以下内容。在中包含此文本。但是,我得到的输出只有这些文本: 我对OpenNLP非常陌生,如果有人知道如何从中获取输出,请告诉我。
在一个节点中。js,我想找到一种获取Unix终端命令输出的方法。有没有办法做到这一点?