j519948746 发表于 2025-5-19 20:20:56

火山服务器(GO)动态构建命令的问题求助大佬

使用 命令执行类.创建 来构建命令时可以填N个参数

也就是
命令执行类.创建("参数1","参数2","参数3"...)


如何动态构建命令,比用户输入了一个字符串"123 456 789 000"
动态将上述字符串分割后填入到参数(例 命令执行类.创建("123","456","789","000"))
注意前提:并不知道这个字符串中包含多少个参数,可能是3个也可能是10个...


也就说文本分割后的数组如何动态将成员提供给exec.Command

AI给出了GO原始的解决方案,不知道如何套到火山上

package main

import (
    "fmt"
    "os/exec"
    "strings"
)

func main() {
    input := "123 456 789"// 任意数量的参数(示例为3个)
   
    // 1. 智能分割字符串(自动处理多空格/首尾空格)
    parts := strings.Fields(input)
   
    // 2. 基础验证
    if len(parts) < 1 {
      fmt.Println("错误:必须至少包含命令名称")
      return
    }

    // 3. 动态构建命令(关键代码)
    cmd := exec.Command(
      parts,         // 命令名称
      parts...,   // 自动展开剩余参数(无论数量)
    )

    // 验证输出
    fmt.Printf("执行命令: %s\n", cmd.Path)
    fmt.Println("完整参数列表:", cmd.Args)
}在AI给出的代码第三步时 不知道怎么套用到火山上

j519948746 发表于 2025-5-19 20:28:08

本帖最后由 j519948746 于 2025-5-19 21:38 编辑

琢磨解决了,方法如下.有需要朋友可以参阅<火山程序 类型 = "通常" 版本 = 1 />

方法 测试
{
    变量 text <类型 = 文本型>
    变量 文本 <类型 = 文本数组类>
    变量 cmd1 <参考 类型 = 命令执行类>
    text = "ping|192.168.1.1|-S|192.168.1.100|-n|2"
    文本 = 分割文本 (text, '|', , , , )
    如果真 (文本.取成员数 () < 1)
    {
      换行输出 ("Parameter loss")
      返回
    }
    如果真 (文本.取成员数 () < 2)
    {
      文本.加入成员 ("")
    }
    cmd1 = cmd1.创建 (文本.取成员 (0), 文本.取成员 (1))
    文本.枚举循环 ()
    {
      如果真 (文本.取枚举索引 () > 1)
      {
            cmd1.命令行 = 加入成员 (cmd1.命令行, 文本.取枚举值 ())
            换行输出 (文本.取枚举值 ())
      }
    }
    换行输出 ("-------------")
    换行输出 (取数组成员数 (cmd1.命令行), cmd1.命令行)
    换行输出 (cmd1.取文本信息 ())
    换行输出 (cmd1.执行_取组合输出 ().取文本 ())

<font color="#ff0000" size="5">}
</font>在这里提一下,据查阅exec.Command的第二个参数是可选的,而火山GO封装的第二个参数为必填,即使空文本参数 对于被执行的应用收到的也是2个命令行(自身路径+一个空参数) 很不友好,有点奇怪,希望可以修改一下第二个参数改为非必填
页: [1]
查看完整版本: 火山服务器(GO)动态构建命令的问题求助大佬