目前,我正在做它用os/exec,并Stdout在golang的身边,和console.log("string")上的NodeJS的身边。基本上我需要生成一个字符串,但只能在 nodejs 中这样做,但我的大部分代码都在 golang 中,所以我试图使我的代码中的这个小点尽可能无缝、安全和可靠,我将我的程序的如此重要的部分放在“console.log”上并从 shell 输出中读取,这让我有点不安。简而言之:我想知道我的节点和 go 代码之间是否存在更好、更标准的通信线路,然后是 console.log + shell 输出,或者这是否足够优化?哦,我程序的这个特定部分的功能是获取一个 markdown 文本文件并使用markdown-it将其转换为 HTML 。一些想法:通过 HTTP 通信(将数据/字符串发送到 golang http 侦听器)通过文件系统进行通信(将字符串写入临时文件并用golang读取)通过“类似于 HTTP 但特定于本地应用程序数据共享的东西”进行通信聚苯乙烯我不能使用 otto,因为降价 - 它不在那里运行。实际代码:parser.gopackage mainimport ( "os" "os/exec" "fmt" "bytes")func main() { cmd := "node" args := []string{"parser.js", "/home/user1/dev/current/wikis/Bob's Pain/markup/index.md"} process := exec.Command(cmd, args...) stdin, err := process.StdinPipe() if err != nil { fmt.Println(err) } defer stdin.Close() buf := new(bytes.Buffer) // THIS STORES THE NODEJS OUTPUT process.Stdout = buf process.Stderr = os.Stderr if err = process.Start(); err != nil { fmt.Println("An error occured: ", err) } process.Wait() fmt.Println("Generated string:", buf)}
2 回答

慕码人2483693
TA贡献1860条经验 获得超9个赞
使用os/exec执行此操作的最简单方法:
command := "node parser.js /path/to/some/file.md"
parts := strings.Fields(command)
data, err := exec.Command(parts[0], parts[1:]...).Output()
if err != nil {
panic(err)
}
output := string(data)
“输出”是从 NodeJS 脚本打印的数据。“命令”是字符串形式的任何命令。

慕森王
TA贡献1777条经验 获得超3个赞
我已经以两种方式接近了类似的要求。
对于构建管道扩展,我会编写一个 Python 脚本,该脚本从命令行获取参数并将结果输出到标准输出。这是一个简单的界面,用于“运行一次”、“一切成功否则快速失败”的用法。如果这与您的情况相同,我会保持原样。
对于Web应用程序,我有Java的服务只是一个特定功能(在我的情况,纳蒂从自然语言字符串日期识别)。这样做的好处是应用程序在调用时已经“预热”了,并且肯定会更快地响应,而不是每次请求进来时都启动。随着时间的推移,使用休息界面可能会显示出更多的好处 - 例如更简单的客户端实现、监控、部署选项、无需更改客户端的切换实现等。这种方式更传统。
- 2 回答
- 0 关注
- 876 浏览
添加回答
举报
0/150
提交
取消