火山服务器(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 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]