草庐IT

STDIN_FILENO

全部标签

unit-testing - 为从中读取的函数填充 os.Stdin

如何在我的测试中填充os.Stdin以获取使用扫描仪从中读取的函数?我使用以下函数通过扫描器请求用户命令行输入:funcuserInput()error{scanner:=bufio.NewScanner(os.Stdin)println("Whatisyourname?")scanner.Scan()username=scanner.Text()/*...*/}现在如何测试这种情况并模拟用户输入?以下示例不起作用。标准输入仍然是空的。funcTestUserInput(t*testing.T){varfile*os.Filefile.Write([]byte("Tom"))os.St

go - 从后台 go 进程读取 stdin 导致 EOF 错误

我正在为Micro写一个插件创建一个后台进程。当后台进程运行时,它反复从stdin读取字节-但它始终是EOF错误。在Micro中,我的后台进程是使用JobSpawn函数创建的,它返回一个*exec.cmd://JobSpawnstartsaprocesswithargsinthebackgroundwiththegivencallbacks//Itreturnsan*exec.CmdasthejobidfuncJobSpawn(cmdNamestring,cmdArgs[]string,onStdout,onStderr,onExitstring,userargs...string)*

docker - 当 PIPE docker 中的输出时从 os.Stdin 读取时被阻止

我正在尝试将程序的输出(日志)通过管道传输到Go程序,该程序聚合/压缩输出并上传到S3。运行该程序的命令是“/program1|/logShipper”。logShipper是用Go编写的,它只是从os.Stdin读取并写入本地文件。本地文件将由另一个goroutine处理并定期上传到S3。有一些现有的docker日志驱动程序,但我们在完全托管的提供程序上运行容器并且日志处理费用非常昂贵,因此我们想绕过现有解决方案并直接上传到S3。logShipper的主要逻辑只是从os.Stdin读取并写入某个文件。它在本地机器上运行时工作正常,但在docker中运行时,goroutine在read

unit-testing - 为从中读取的函数填充 os.Stdin

如何在我的测试中填充os.Stdin以获取使用扫描仪从中读取的函数?我使用以下函数通过扫描器请求用户命令行输入:funcuserInput()error{scanner:=bufio.NewScanner(os.Stdin)println("Whatisyourname?")scanner.Scan()username=scanner.Text()/*...*/}现在如何测试这种情况并模拟用户输入?以下示例不起作用。标准输入仍然是空的。funcTestUserInput(t*testing.T){varfile*os.Filefile.Write([]byte("Tom"))os.St

io - 使用 Scanf + input + enter 从 stdin 获得双重输入,如何刷新?

我正在使用Go的可移植解压缩版本!每当我尝试使用Scanf(以及相关函数)执行输入输出控制台实现时,插入运行时输入并使用enter验证程序中的结果(它是一个循环)就像我输入了两次或三次一样。显然(就像在C中一样)调用读取函数后需要清除stdin,但我不知道该怎么做。我似乎是唯一一个遇到这个愚蠢的基本问题的人(为什么?)在这个无休止的循环程序中,即使在我糟糕的同花顺尝试之后,问题也会被问和回答3次:packagemainimport"fmt"import"time"varglobalBad,globalGoodintfuncThread1(){variintvartstringfor{f

json - 通过 STDIN/STDOUT 使用 json 的 websocketd

我们构建的软件由两部分组成,一个在浏览器中运行的GUI(前端)和一个将Go编译成exe的内核(后端)。为了将这两个部分粘合在一起,我们使用了在本地机器上运行的nodejs+expressjs+socket.io。Nodejs通过http/socket.io与浏览器对话,它还“生成”Goexe作为child_process。现在websocketd,我们可以跳过nodejs+expressjs+socket.io部分。太好了。难点在于:浏览器中的GUI,用于将JSON发送给nodejs,然后写入配置文件。我们的内核exe将读取该JSON配置文件以确定要做什么。我想不能通过STDIN/ST

os.stdin 上的 golang io.TeeReader 中断 tty

我正在尝试创建一个程序,它通过ssh连接到远程服务器并执行用户给出的命令。我在os.stdin上使用os.TeeReader来记录所有用户输入,但这会破坏tty。varbufferReadbytes.Buffersshstring:=user+"@"+hostcmd:=exec.Command("ssh",sshstring,"-oStrictHostKeyChecking=no")cmd.Stdout=os.Stdoutcmd.Stdin=io.TeeReader(os.Stdin,&bufferRead)cmd.Stderr=os.Stderrcmd.Run()fmt.Printf

go - 如何使用 Go 从 stdin 指定的目录中读取文件名

我想读取给定目录中的所有文件,我试过这个:packagemainimport("bufio""fmt""io/ioutil""os""strings")funcmain(){fmt.Print("directory:")inBuf:=bufio.NewReader(os.Stdin)inDir,_:=inBuf.ReadString('\n')strings.Replace(inDir,"\\","/",-1)files,_:=ioutil.ReadDir(inDir)fmt.Println(files)}这将始终返回带有或不带有“strings.Replace”行的“[]”。谁能指出

Golang stdin 读错了德语变音符号

我来自德国,所以我使用变音符号,例如ä、ö和ü。然而,Golang无法从标准输入中正确读取它们。当我执行这个简单的程序时:packagemainimport("bufio""fmt""os")funcmain(){for{b,_,_:=bufio.NewReader(os.Stdin).ReadLine()printBytes(b)}}funcprintBytes(bytes[]byte){for_,b:=rangebytes{fmt.Printf("0x%X",b)}fmt.Println()}我得到输出:C:\dev\golang>goruntest.goä0xE20x800x9E

go - Golang stdin 循环上的 CPU 使用率过高

我有一个golang应用程序,它需要监听stdin上的输入——不是作为命令行实用程序,而是保持运行和监听。以下代码经过稍微编辑后可以运行,但在“空闲”时具有非常高的CPU负载-我不确定为什么-也不清楚如何才能做得更好。所以我需要没有CPU负载的相同功能!(这是ejabberd的身份验证处理程序的一部分)bioIn:=bufio.NewReader(os.Stdin)bioOut:=bufio.NewWriter(os.Stdout)varerrerrorvarsuccessboolvarlengthuint16varresultuint16for{binary.Read(bioIn,b