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

目前,我正在做它用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.go

package main


import (

    "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)

}


ABOUTYOU
浏览 877回答 2
2回答

慕码人2483693

使用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 脚本打印的数据。“命令”是字符串形式的任何命令。

慕森王

我已经以两种方式接近了类似的要求。对于构建管道扩展,我会编写一个 Python 脚本,该脚本从命令行获取参数并将结果输出到标准输出。这是一个简单的界面,用于“运行一次”、“一切成功否则快速失败”的用法。如果这与您的情况相同,我会保持原样。对于Web应用程序,我有Java的服务只是一个特定功能(在我的情况,纳蒂从自然语言字符串日期识别)。这样做的好处是应用程序在调用时已经“预热”了,并且肯定会更快地响应,而不是每次请求进来时都启动。随着时间的推移,使用休息界面可能会显示出更多的好处 - 例如更简单的客户端实现、监控、部署选项、无需更改客户端的切换实现等。这种方式更传统。
打开App,查看更多内容
随时随地看视频慕课网APP