我正在寻找在Go中执行shell命令,并在程序中以字符串形式获取结果输出。我看到了Rosetta
Code
版本:
package main
import "fmt"
import "exec"
func main() {
cmd, err := exec.Run("/bin/ls", []string{"/bin/ls"}, []string{}, "", exec.DevNull, exec.PassThrough, exec.PassThrough)
if (err != nil) {
fmt.Println(err)
return
}
cmd.Close()
但这并不能以我可以通过编程方式访问的方式捕获实际的标准或错误-那些仍会打印到常规的stdout /
stderr。我看到使用Pipe作为out或err可以在其他地方提供帮助,但是没有如何执行此操作的示例。有任何想法吗?
该答案不代表Go标准库的当前状态。请查看@Lourenco的最新方法的答案!
您的示例实际上并未从stdout读取数据。这对我有用。
package main
import (
"fmt"
"exec"
"os"
"bytes"
"io"
)
func main() {
app := "/bin/ls"
cmd, err := exec.Run(app, []string{app, "-l"}, nil, "", exec.DevNull, exec.Pipe, exec.Pipe)
if (err != nil) {
fmt.Fprintln(os.Stderr, err.String())
return
}
var b bytes.Buffer
io.Copy(&b, cmd.Stdout)
fmt.Println(b.String())
cmd.Close()
}
我有一个案例,我想问我可以解决与Spring壳。我有一个Main.jar应用程序,它有几个部署在Wildly服务器上的Spring任务。在我的例子中,我不能停止或重新部署main.jar,因为必须不停地提供服务。
你可以不离开gdb,直接执行shell命令,比如: (gdb) shell ls 或 (gdb) !ls 这里,"!"和命令之间不需要有空格(即,有也成)。 特别是当你在构建环境(build目录)下调试程序的时候,可以直接运行make: (gdb) make CFLAGS="-g -O0" 详情参见 gdb手册
问题内容: 我仍在尝试掌握如何运行linux或Windows shell命令并在node.js中捕获输出的细节。最终,我想做这样的事情… 重要的一点是必须对全局范围的变量(或对象)可用。我尝试了以下功能,但是由于某种原因,我被打印到控制台了。 我很难理解代码在哪里突破了…该模型的非常简单的原型可以工作… 有人可以帮助我了解为什么有效,但是无效吗?FWIW,我需要使用,因为缓冲区限制为200KB。
问题内容: 我正在尝试从GNU / Linux平台上的Java应用程序执行shell命令。问题是,尽管它可以从bash成功运行,但调用另一个Java应用程序的脚本永远不会结束。我试图调试它: 我尝试使用:ProcessBuilder(); 和Runtime.getRuntime()。exec(cmd); 看起来它正在等待完成。有任何想法吗? 谢谢,Laurențiu 问题答案: 您是否正在处理标准
问题内容: 我正在尝试在我编写并按下的应用程序中从应用程序仿真器终端(您可以在Google Play中找到它)执行此命令enter,因此请编写: 然后再次按,并使用的新功能开始录制屏幕。 因此,我尝试使用以下命令从Java执行相同的代码: 但是不起作用,因为未创建文件。显然,我在装有android kitkat的有根设备上运行。问题出在哪里?我该如何解决?因为从终端仿真器工作并且在Java中不行?
我正在尝试从jenkinsfile执行一组命令。问题是,当我尝试将stdout的值分配给变量时,它不起作用。我尝试了双引号和单引号的不同组合,但到目前为止没有运气。 在这里,我使用最新版本的jenkinsfile以及旧版本执行脚本。将shell命令放入 """ """ 不允许创建新变量,并给出client_name命令不存在的错误。 我想将命令p4客户端-e$client_name的标准输出分配给