为了账号安全,请及时绑定邮箱和手机立即绑定

从 golang 执行 nodejs 脚本的最佳方法是什么,返回一个字符串

从 golang 执行 nodejs 脚本的最佳方法是什么,返回一个字符串

C#
ABOUTYOU 2021-11-15 15:54:16
目前,我正在做它用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 脚本打印的数据。“命令”是字符串形式的任何命令。


查看完整回答
反对 回复 2021-11-15
?
慕森王

TA贡献1777条经验 获得超3个赞

我已经以两种方式接近了类似的要求。

对于构建管道扩展,我会编写一个 Python 脚本,该脚本从命令行获取参数并将结果输出到标准输出。这是一个简单的界面,用于“运行一次”、“一切成功否则快速失败”的用法。如果这与您的情况相同,我会保持原样。

对于Web应用程序,我有Java的服务只是一个特定功能(在我的情况,纳蒂从自然语言字符串日期识别)。这样做的好处是应用程序在调用时已经“预热”了,并且肯定会更快地响应,而不是每次请求进来时都启动。随着时间的推移,使用休息界面可能会显示出更多的好处 - 例如更简单的客户端实现、监控、部署选项、无需更改客户端的切换实现等。这种方式更传统。


查看完整回答
反对 回复 2021-11-15
  • 2 回答
  • 0 关注
  • 876 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号