当前位置: 首页 > 面试题库 >

共享来自单独命令/流程的属性

蒙胤
2023-03-14
问题内容

我提供了带有几个命令和子命令的命令行工具,我使用了cobra命令行,并且我有两个
单独的命令 ,第一个是其他 命令的 先决条件

例如,第一个命令是通过创建临时文件夹并验证某些文件来选择环境

第二个命令应该从第一个命令获得一些属性

用户应该像这样执行它

btr准备
btr运行

run command执行时,它应该从prepare命令结果中获取一些数据

// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
    Use:   "btr",
    Short: "piping process",
}


    var prepare = &cobra.Command{
        Use:   "pre",
        Short: "Prepare The environment" ,
        Run: func(cmd *cobra.Command, args []string) {

        //This creating the temp folder and validate some configuration file    
           tmpFolderPath,parsedFile := exe.PreProcess()
        },
    }


    var initProcess = &cobra.Command{
        Use:   “run”,
        Short: “run process”,
        Run: func(cmd *cobra.Command, args []string) {

      //Here I need those two properties

             run(tmpFolderPath, ParsedFile)
        },
    }

func init() {

    rootCmd.AddCommand(prepare,initProcess)

}

更新

好吧,下面的答案并没有真正的帮助。我需要在 本地和云环境中的
两个命令之间共享状态,如果我从shell脚本运行命令行命令来调用1命令,然后再调用第二个需要从状态中获取一些状态的命令,该如何做呢?第一条命令,我需要
在我的上下文中具有代码示例的 端到端 解决方案

更新2

假设我了解我需要配置文件(json),

我应该在哪里创建它(路径)?

什么时候清洗?

如果我使用1file,我应该如何验证存储与特定过程有关的数据,并在需要时获取其他过程数据(guid)?

可以说我已经配置如下

type config struct{

    path string,
    wd string,
    id string,//guid?

}

问题答案:

在命令之间共享信息

就像评论中所说的那样,如果您需要跨命令共享数据,则需要将其持久化。您使用的结构无关紧要,但是为了简单起见,由于JSON是当前用于数据交换的最扩展的语言,我们将使用它。

我应该在哪里创建它(路径)?

我的建议是使用用户的住所。许多html" target="_blank">应用程序在此处保存其配置。这样可以轻松实现多环境解决方案。假设您的配置文件将命名为 myApp

func configPath() string {
    cfgFile := ".myApp"
    usr, _ := user.Current()
    return path.Join(usr.HomeDir, cfgFile)
}

什么时候清洗?

那显然取决于您的要求。但是,如果你经常需要运行pre,并run按照这个顺序,我敢打赌,你可以以后inmediately清理run执行,当它不会再需要。

如何存放呢?

这很简单。如果您需要保存的是您的config结构,则可以执行以下操作:

func saveConfig(c config) {
    jsonC, _ := json.Marshal(c)
    ioutil.WriteFile(configPath(), jsonC, os.ModeAppend)
}

并阅读吗?

func readConfig() config {
    data, _ := ioutil.ReadFile(configPath())
    var cfg config
    json.Unmarshal(data, &cfg)
    return cfg
}

// pre command
// persist to file the data you need
saveConfig(config{ 
    id:   "id",
    path: "path",
    wd:   "wd",
})



// run command
// retrieve the previously stored information
cfg := readConfig()

// from now you can use the data generated by `pre`

免责声明 :我已简短删除了所有错误处理。



 类似资料:
  • 在traits内部定义的方法可以访问同一对象中定义的方法一样的公共属性范围,这是很有用的。然而,有没有任何方法可以使两个特征使用相同的属性名称,但每个属性都在不同的范围内,因此不会覆盖

  • 问题内容: 我对如何使用Toast打印消息感到困惑。我需要使用它来打印来自线程的while循环的消息。我的渲染图形线程与我的活动不在同一个类中。我的意思是,它们不在同一文件中实现。有没有办法做到这一点? 问题答案: 您可以使用runOnUiThread:

  • 问题内容: 我正在使用多个聊天服务器(nodeJS)和一个Redis服务器制作聊天应用程序,这应该有助于对所有nodeJS实例进行分组。好吧,我有这个: Redis运行正常,如果我在同一服务器上有两个用户,他们可以聊天。但是,如果它们在不同的服务器上,则不能,因为套接字不在服务器之间共享。我该如何解决?我检查了关于redis上的pub / sub的信息,我敢肯定这是答案,但我没有设法实现它。 问题

  • 问题内容: 我有一个下载器功能,可以并行下载多个文件。我使用以便下载同一文件的不同块。我想显示下载的状态栏。为此,我需要知道已经下载的总字节数()。 是否有一种方法可以设置将在所有这些进程和主进程之间共享的变量,以便每个进程都可以追加刚刚下载的字节数? 问题答案: 解决方案是利用新进程并传递共享的ctypes值:

  • 我试图允许nginx在多个容器之间代理,同时访问这些容器中的静态文件。 若要在使用docker compose创建的容器之间共享卷,请执行以下操作: 然而,我实际需要的是nginx compose文件在一个单独的文件中,也在一个完全不同的文件夹中。换句话说,命令将单独运行。我尝试了以下方法: 此处正确找到的一个工作是将nginx容器静态文件卷改为如下所示: 上面的方法是正确的,但是它看起来是“刺耳

  • 我有一个简单的TCP服务器,它监听一个端口。 我从节点server.js开始,然后在Mac上用Ctrl Z关闭它。当我试图再次运行它与我得到这个错误消息: 我是否以错误的方式关闭程序?我怎样才能防止这种情况发生?