Как мне принять строку текста во время функции go cli? - PullRequest
0 голосов
/ 04 мая 2019

Я пытаюсь работать над PoC с добавлением exec.Command's в плагин cli, однако я пытаюсь понять, как заставить его принимать пользовательский ввод с помощью команды. Я признаю, что я довольно новичок в Go, пришедший из PHP и скриптов Bash, так что ... я уверен, что мне здесь не хватает чего-то очень простого, и это немного смущает.

Я пробовал устанавливать переменные, добавлять переменные в вывод, добавлять в bufio и пытаться ответить безуспешно.

out, err := exec.Command("mtr", "-c", "10", "-r", destIP).Output()

был самый последний сбой ...

type Mtr struct{}

func (m *Mtr) Run(command []string, context plugin.PluginContext, ui terminal.UI) {
    // var destIP string - commented out simply so I could rebuild the file and get the plugin working again.

    ui.Say("")
    ui.Say(terminal.AdvisoryColor("Wait while we run a traceroute..."))
    ui.Say("")

    out, err := exec.Command("mtr", "-c", "10", "-r").Output()
    if err != nil {
        ui.Say(fmt.Sprintf("%s", err))
    }
    output := string(out[:])

    table := ui.Table([]string{"", ""})

    table.Add("", output)
    table.Print()

Я буквально просто хочу, чтобы он мог принять что-то вроде этого

плагин mainprogram mtr В настоящее время я настроен на принудительное использование Google, но это не совсем то, чего я хочу от этого ...

out, err := exec.Command("mtr", "-c", "10", "-r", "8.8.8.8").Output()

Выход по току при неудачных попытках дает -

Shawns-MBP-2:directoryhere $ mainprog plugin mtr 4.4.4.4

Wait while we run a traceroute...



Shawns-MBP-2:directoryhere$

With the forced Google DNS, it obviously shows -

Shawns-MBP-2:directoryhere $ mainprog plugin mtr

Wait while we run a traceroute...


   Start: 2019-05-03T15:41:18-0500   
   HOST: stuff   Loss%   Snt   Last   Avg  Best  Wrst StDev   
     1.|-- stuff   0.0%    10    1.6   1.7   1.2   3.1   0.5   
     2.|-- stuff  0.0%    10    2.6   6.5   2.0  12.4   4.5   
     3.|-- stuff               0.0%    10    3.3   3.3   2.7   4.1   0.4   
     4.|-- stuff       0.0%    10   13.6  12.2   9.1  15.6   2.5   
     5.|-- stuff               0.0%    10    9.2  12.9   9.2  17.7   2.5   
     6.|-- stuff              0.0%    10    8.7   9.1   8.0  10.5   0.6   
     7.|-- stuff               0.0%    10    9.1   9.2   8.2  10.1   0.5   
     8.|-- stuff            0.0%    10   10.3  10.1   9.7  10.4   0.3   
     9.|-- stuff              0.0%    10    8.8   9.2   8.5  10.7   0.6   
    10.|-- google-public-dns-a.googl  0.0%    10    8.7   8.9   8.2  10.0   0.4

Ответы [ 2 ]

0 голосов
/ 04 мая 2019

Направившись в правильном направлении, наконец-то разобрался -

dest := os.Args[2]
out, err := exec.Command("mtr", "-c", "10", "-r", dest).Output()

Это заставило его принять входные данные и проверило, что оно принимает и IP-адреса, и домены. Это открывает целый новый мир возможностей сейчас: D

0 голосов
/ 04 мая 2019

Вы ищете:

func main() {
    out, err := exec.Command("mtr", "-c", "10", "-r", os.Args[1]).Output()
    if err != nil {
        ui.Say(fmt.Sprintf("%s", err))
    }
}

Соберите его в двоичный файл и вызовите с IP / доменом в качестве аргумента.

Подробнее https://gobyexample.com/command-line-arguments

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...