草庐IT

thumb_stdout

全部标签

go - 在 Golang 中运行外部 python,捕获连续的 exec.Command Stdout

所以我的go脚本会像这样调用一个外部pythoncmd=exec.Command("python","game.py")cmd.Stdout=os.Stdoutcmd.Stderr=os.Stderrgofunc(){err:=cmd.Run()iferr!=nil{panic(err)}}()它同时运行我的python脚本,这太棒了。但现在的问题是,我的python脚本会无限运行,时不时会打印出一些信息。我想“捕获”这些Stdout并在我的golang终端上打印出来。我如何同时执行此操作(无需等待我的python脚本退出)? 最佳答案

go - 我如何从向 stdout 发出错误的一系列 exec 命令中获取错误消息

在我的搜索中,我发现了许多关于如何为单个exec命令检索stdOut错误的示例,但我正在努力处理整个链条。在我的实际代码中,我有5个exec进程和一个写入结果的文件,所有这些都由io管道连接。这是我正在进行的操作的简化版本,在现实世界中,管道中的stdOut用作下一个进程的stdIn,直到我们复制到最终文件写入:fileOut,err:=os.Create(filePath)iferr!=nil{returnfmt.Errorf("filecreateerror:%s:%s",filePath,err)}writer:=bufio.NewWriter(fileOut)deferwrit

sockets - golang 将套接字附加到 Stdin/Stdout

将套接字附加到标准输入/标准输出的最佳方法是什么。我知道我们可以将stdin/Stdout重定向到任何文件描述符,但是我们如何对套接字做同样的事情。(比如socat的工作原理)? 最佳答案 好吧,Go中的套接字类型实现了io.Writer接口(interface),而os.Stdin实现了io.Reader,所以我的第一个猜测是尝试bufio.Writer。它可能看起来像:packagemainimport("bufio""os")funcmain(){socket:=getSocket()//leftasanexercisefor

logging - 从 goroutines 写入 STDOUT 时避免困惑的输出

当写入stdout或日志时,如何确保来自多个goroutines的输出不会搞乱输出吗?例如确保输出是这样的Routine1found1235entriesRoutine3found999entriesRoutine2found24entries不是这样的Routine1fouRoutine3found999entriesnd1235entriRoutine2found24entrieses我的意思是一个goroutine的输出没有与另一个goroutine同时写入即是否有库或标准方法来获取输出周围的信号量? 最佳答案 使用log用于

go - Golang如何实现stdin/stdout/stderr

我做了一个能够解析命令行输入的小程序。它通过std.in运行良好。但是,当我查阅官方文档进一步学习时,我发现对我来说太多了。var(Stdin=NewFile(uintptr(syscall.Stdin),"/dev/stdin"))我分别看了funcNewFile、typeuintpty、Packagesyscall的文档,但没能完整理解。另外,我也不知道/dev/stdin的含义。除了go,我从未学过其他静态编程语言。我如何实现stdin的魔力? 最佳答案 在syscall包中,Stdin只是数字0:var(Stdin=0Std

go - 实时从 command exec 捕获 stdout

我目前正在开发一个可以执行命令的聊天机器人。我希望它做的一件事是能够运行脚本并将脚本的标准输出输出到聊天中。我遇到的问题是该函数收集脚本的所有标准输出并在最后返回它们,我想尝试修改它以实时写入并且在这样做时遇到了问题。我认为这个问题可能涉及到它只有一种方法可以将文本返回到聊天channel,那就是通过重启的返回功能。但是,我想遍历exec命令并在可能的情况下输出它。这是我的代码:funcreboot(command*bot.Cmd)(string,error){n:=command.Args[0]//thisreturniswhatallgetssentintochatchannelr

go - 如何在 Golang 中同时通过 STDIN/STDOUT 连接多个程序读/写?

在高层次上,我想完成以下任务。每个框都是一个正在运行的程序,从STDIN读取并写入STDOUT。我想编写一个golang程序来设置并运行它,以便所有生产/消费并行发生。我正在考虑使用io.Pipe、channels和os.Exec等。+-----------+|PROG-1+-----------------------++--------->||v|+-----------+|+-------++-----------+|DIFF+----->|GENERATOR|||+-----------++---+---+|^|||+-----------+|||||+--------->|P

go - 同时扫描 stdout 和 stderr

我正在寻找一种将stdout和stderr作为一个流同时处理的方法。对于标准输出,我可以使用:cmd:=exec.Command(command,flags...)varwgsync.WaitGroupstdout,err:=cmd.StdoutPipe()iferr!=nil{returnfmt.Errorf("RunCommand:cmd.StdoutPipe():%v",err)}iferr:=cmd.Start();err!=nil{returnfmt.Errorf("RunCommand:cmd.Start():%v",err)}scanner:=bufio.NewScann

mysql - 如何将 stdout 从 docker 容器重定向到主机

我正在尝试从主机系统调用docker的mysqldump以保存来自golang的mysql转储。它适用于主机mysqldump,但不适用于docker的mysqldump。funcwriteDb(dbNamestring){varmysqldumpPathstring="/usr/bin/mysqldump"//varmysqldumpPathstring="/Applications/MAMP/Library/bin/mysqldump"//cmd:=exec.Command(mysqldumpPath,fmt.Sprintf("-u%s",USER),fmt.Sprintf("-p

golang - os.stdout 和 multiwriter 之间的区别

我有这段代码可以运行zsh并将其输出记录到输出文件中。packagemainimport("io""os""os/exec")funcmain(){cmd:=exec.Command("zsh")f,_:=os.Create("log.txt")multiWriter:=io.MultiWriter(os.Stdout,f)cmd.Stdout=multiWritercmd.Stderr=os.Stderrcmd.Stdin=os.Stdincmd.Run()}funchaltOnError(errerror){iferr!=nil{panic(err)}}程序执行时,输入ls会输出f