我有一堆系统命令,它们与将新内容附加到文件非常相似。我编写了一个简单的脚本来执行系统命令,如果存在诸如“ ls”,“
date”等单个单词,该脚本就可以很好地工作。但是如果命令大于此范围,则程序将死亡。
以下是代码
package main
import (
"fmt"
"os/exec"
"sync"
)
func exe_cmd(cmd string, wg *sync.WaitGroup) {
fmt.Println(cmd)
c = cmd.Str
out, err := exec.Command(cmd).Output()
if err != nil {
fmt.Println("error occured")
fmt.Printf("%s", err)
}
fmt.Printf("%s", out)
wg.Done()
}
func main() {
wg := new(sync.WaitGroup)
wg.Add(3)
x := []string{"echo newline >> foo.o", "echo newline >> f1.o", "echo newline >> f2.o"}
go exe_cmd(x[0], wg)
go exe_cmd(x[1], wg)
go exe_cmd(x[2], wg)
wg.Wait()
}
以下是我看到的错误
exec: "echo newline >> foo.o": executable file not found in $PATHexec:
"echo newline >> f2.o": executable file not found in $PATHexec:
"echo newline >> f1.o": executable file not found in $PATH
我想,这可能是由于未单独发送cmds和参数(http://golang.org/pkg/os/exec/#Command)导致的。我想知道如何颠覆这个问题,因为我不知道命令中将要执行多少个参数。
我找到了实现这一目标的相对体面的方法。
out, err := exec.Command("sh","-c",cmd).Output()
直到现在为我工作。仍在寻找更好的方法来实现这一目标。
编辑1:
最后,一个更简单,有效(到目前为止)的方法是这样的
func exe_cmd(cmd string, wg *sync.WaitGroup) {
fmt.Println("command is ",cmd)
// splitting head => g++ parts => rest of the command
parts := strings.Fields(cmd)
head := parts[0]
parts = parts[1:len(parts)]
out, err := exec.Command(head,parts...).Output()
if err != nil {
fmt.Printf("%s", err)
}
fmt.Printf("%s", out)
wg.Done() // Need to signal to waitgroup that this goroutine is done
}
多亏了go中各种各样的争论以及向我指出的人:)
问题内容: 在下面的程序中,名称为“ don”,因此该命令将搜索活动目录,其所有名称均以don开头(例如donald等)。但是从读者对象分配后,line2变量变为空,并且永远不会进入循环。我究竟做错了什么?仅供参考:当我在命令行上输入命令时,该命令有效。 问题答案: 如果我没记错的话,管道(或重定向)需要使用cmd.exe启动程序。就像是:
问题内容: 我试图便宜一些,并在Java中执行本地系统命令()。我想从中获取输出并将其存储在String中。最好的方法是什么?当前代码: 问题答案: 你的方法与我可能要做的事情并不遥远: 当然,请处理你关心的任何异常情况。
问题内容: 我需要在 node.js 函数中 它将 同步 执行给定的命令行并返回该命令文本的所有标准输出。 ps。同步是错误的。我知道。仅供个人使用。 更新 现在我们有了mgutz的解决方案,该解决方案为我们提供了退出代码,但没有stdout!仍在等待更准确的答案。 问题答案: Node.js(从0.12版本开始-已有一段时间)支持: 您现在可以直接执行以下操作: 它会做您期望的。(默认将I /O
最近许多小伙伴遇到ssh命令不知道怎么执行, 过来找我解决。 我将各个系统如何打开终端的方法汇总如下,希望能帮到各位! Windows 10 Windows 7 Ubuntu macOS Windows 10 在Windows 10 系统中的Powershell 命令提示符窗口比CMD窗口功能强大的多, 并且内置ssh 命令,下面教如何打开Powershell。 使用快捷键 Win + R打开运行
问题内容: 我正在尝试生成一个执行系统命令的进程,而我自己的程序仍然继续运行,并且两个进程将并行运行。我在linux上工作。 我在网上查了一下,听起来应该使用exec()系列。但这并不完全符合我的预期。例如,在下面的代码中,我只看到“ before”被打印,而没有看到“ done”。 我很好奇我是否在撒东西? [更新] 谢谢你们的评论。现在我的程序看起来像这样。除了最后,一切正常,我必须按Ente
11.6 执行系统命令 许多批处理作业可能需要一个外部命令调用内部的批处理作业.这样一个过程可以分开调度,但常见的元数据对运行的优势将会丢失.此外,multi-step 作业需要分割成多个作业. 因此通常的 spring batch提供一个tasklet实现调用系统命令: <bean class="org.springframework.batch.core.step.tasklet.System