golang开放第二终端/控制台
我一直在四处寻找,找不到像这样的问题 在golang是否有办法打开第二个控制台/终端窗口并向其发送输出? 我基本上希望使用一个终端输入信息,另一个终端有一个持续不断的信息源,只要程序需要,它就会在窗口中更新,所以我不想覆盖用户当前在第一个终端中输入的内容 更新: 我一直在研究一些想法,使用exec函数,您可以运行终端命令,例如windows“开始”函数,它可以打开另一个终端并启动。这就是我所做的,现在我只需要添加一个管道,以便可执行文件“node.exe”可以从中读取。这显然是使用exec库中的cmd结构完成的。我会更新,一旦我得到了所有我会张贴我的答案golang开放第二终端/控制台,go,terminal,console,window,Go,Terminal,Console,Window,我一直在四处寻找,找不到像这样的问题 在golang是否有办法打开第二个控制台/终端窗口并向其发送输出? 我基本上希望使用一个终端输入信息,另一个终端有一个持续不断的信息源,只要程序需要,它就会在窗口中更新,所以我不想覆盖用户当前在第一个终端中输入的内容 更新: 我一直在研究一些想法,使用exec函数,您可以运行终端命令,例如windows“开始”函数,它可以打开另一个终端并启动。这就是我所做的,现在我只需要添加一个管道,以便可执行文件“node.exe”可以从中读取。这显然是使用exec库中的
package main
import (
"log"
"os/exec"
)
func main(){
cmd := exec.Command("cmd","/C","start","node.exe")
err := cmd.Start()
if err != nil {
log.Fatal(err)
}
for i := 0; i < 100; i++{
log.Println(i)
}
}
主程序包
进口(
“日志”
“os/exec”
)
func main(){
cmd:=exec.Command(“cmd”、“/C”、“start”、“node.exe”)
错误:=cmd.Start()
如果错误!=零{
log.Fatal(错误)
}
对于i:=0;i<100;i++{
log.Println(i)
}
}
它在另一个终端中运行node.exe,同时循环并将0-99打印到当前终端为了澄清这一点,“打开一个新的控制台窗口”似乎非常特定于操作系统
那么,为什么不将日志信息输出到一个文件中,然后打开一个新窗口并在该文件上运行tail
一般来说,如果要获得重要的日志信息,应该将其放入文件中。因此,这一部分只是一个良好的实践开始。一旦你有了这个日志文件,在这个文件上运行tail
似乎是完全合理的
这里基本上构建的是“客户机/服务器”模式。这种行为的标准是提供一个“服务器”程序,然后通过“客户端”程序连接到它。看看MongoDB、Redis或MySQL,它们附带了一些运行服务器和独立客户端的守护程序
根据您的描述,您试图同时执行这两项操作,并将其作为默认行为。即使这样做行得通,对其他试图使用该程序的人来说也会显得很奇怪。你需要处理一些奇怪的案子。比如,如果我拨出“服务器”部分(日志窗口),然后访问该窗口并点击CTRL+C
,会发生什么?这会杀死服务器吗?在第一个窗口中,客户端会发生什么情况
即使你成功地做到了,尝试做2合1也会很麻烦。不是一个*nix疯子,我不确定是否有一种“本地”的方法可以做到这一点。也就是说,您可以始终设置“客户端”和“服务器”。。客户机接受输入,服务器输出流。我已经想到了,但这不是我最喜欢的方式。从别人的经验中知道它可能不是本地的东西是很有帮助的。在Azul3D中,示例中有一个名为Azul3D_info的文件,该文件创建一个窗口并输出其中的信息。但是,我不确定你是否可以控制主控制台,你必须从Windows资源管理器启动可执行文件,否则你会收到一条消息,程序停止工作。哦,太棒了,我去看看。感谢Dippo。仅供参考:在linux上有一些很好的例子
,为什么不将日志信息输出到一个文件中,然后打开一个新窗口并在该文件上运行tail?
我这里有一个例子。我正在尝试启动一个新的gnome终端,以便在程序在主用户窗口中运行时将expvarmon启动到另一个窗口中。