递归火山软件开发平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 火山 源码 类库
查看: 515|回复: 1
打印 上一主题 下一主题

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

[复制链接]

19

主题

61

帖子

443

积分

中级会员

Rank: 3Rank: 3

积分
443
跳转到指定楼层
楼主
发表于 2025-5-19 20:20:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
使用 命令执行类.创建 来构建命令时可以填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给出的代码第三步时 不知道怎么套用到火山上
回复

使用道具 举报

19

主题

61

帖子

443

积分

中级会员

Rank: 3Rank: 3

积分
443
沙发
 楼主| 发表于 2025-5-19 20:28:08 | 只看该作者
本帖最后由 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个命令行(自身路径+一个空参数) 很不友好,有点奇怪,希望可以修改一下第二个参数改为非必填
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|递归火山软件开发平台 ( 鄂ICP备18029190号 )

GMT+8, 2025-6-5 09:54 , Processed in 0.088441 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表