递归火山软件开发平台

标题: 火山服务器(GO)动态构建命令的问题求助大佬 [打印本页]

作者: j519948746    时间: 2025-5-19 20:20
标题: 火山服务器(GO)动态构建命令的问题求助大佬
使用 命令执行类.创建 来构建命令时可以填N个参数

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


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


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

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

  1. package main

  2. import (
  3.     "fmt"
  4.     "os/exec"
  5.     "strings"
  6. )

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

  18.     // 3. 动态构建命令(关键代码)
  19.     cmd := exec.Command(
  20.         parts[0],         // 命令名称
  21.         parts[1:]...,     // 自动展开剩余参数(无论数量)
  22.     )

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

作者: j519948746    时间: 2025-5-19 20:28
本帖最后由 j519948746 于 2025-5-19 21:38 编辑

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

  2. 方法 测试
  3. {
  4.     变量 text <类型 = 文本型>
  5.     变量 文本 <类型 = 文本数组类>
  6.     变量 cmd1 <参考 类型 = 命令执行类>
  7.     text = "ping|192.168.1.1|-S|192.168.1.100|-n|2"
  8.     文本 = 分割文本 (text, '|', , , , )
  9.     如果真 (文本.取成员数 () < 1)
  10.     {
  11.         换行输出 ("Parameter loss")
  12.         返回
  13.     }
  14.     如果真 (文本.取成员数 () < 2)
  15.     {
  16.         文本.加入成员 ("")
  17.     }
  18.     cmd1 = cmd1.创建 (文本.取成员 (0), 文本.取成员 (1))
  19.     文本.枚举循环 ()
  20.     {
  21.         如果真 (文本.取枚举索引 () > 1)
  22.         {
  23.             cmd1.命令行 = 加入成员 (cmd1.命令行, 文本.取枚举值 ())
  24.             换行输出 (文本.取枚举值 ())
  25.         }
  26.     }
  27.     换行输出 ("-------------")
  28.     换行输出 (取数组成员数 (cmd1.命令行), cmd1.命令行)
  29.     换行输出 (cmd1.取文本信息 ())
  30.     换行输出 (cmd1.执行_取组合输出 ().取文本 ())

  31. <font color="#ff0000" size="5">}
  32. </font>
复制代码
在这里提一下,据查阅exec.Command的第二个参数是可选的,而火山GO封装的第二个参数为必填,即使空文本参数 对于被执行的应用收到的也是2个命令行(自身路径+一个空参数) 很不友好,有点奇怪,希望可以修改一下第二个参数改为非必填





欢迎光临 递归火山软件开发平台 (https://bbs.voldp.com/) Powered by Discuz! X3.4