Я использую следующий код, который запускает команду для двоичного файла и должен предоставить вывод
если я запустил команду ftr get apps в своем Mac, я получил
[app1 apps2]
Теперь копирую двоичный файл в папку с тестовыми данными. и запустите приведенный ниже код, и я хочу получить приложения, сейчас нет ошибки, но я не получаю также данные, чего здесь может не хватать?
Cmd := exec.Command("ftr", "get", "apps")
Cmd.Dir = "./testdata/"
err := Cmd.Start()
fmt.Println(err)
bytes, e := Cmd.Output()
fmt.Println(bytes, e)
Возможный дубликат Как получить вывод из stdout в строку в golang

У вас не будет прямого вывода, поскольку командам требуется некоторое время, прежде чем они будут записаны в stdout / stderr, поэтому вам нужно в основном подождать, пока что-то выйдет.
Это можно сделать с помощью bufio.NewScanner, например:
package main
import (
"bufio"
"fmt"
"os/exec"
"strings"
)
func main() {
args := "get apps"
cmd := exec.Command("ftr", strings.Split(args, " ")...)
cmd.Dir = "./testdata/"
stdout, _ := cmd.StdoutPipe()
cmd.Start()
scanner := bufio.NewScanner(stdout)
scanner.Split(bufio.ScanWords)
for scanner.Scan() {
m := scanner.Text()
fmt.Println(m)
}
cmd.Wait()
}
Если ваша команда записывает на stderr вместо stdout, вам может потребоваться использовать cmd.StderrPipe вместо cmd.Stdoutpipe для получения вывода.
Привет, почему ждать после for scanner ? for не должно быть после ожидания?
и можно как-нибудь получить все значение в 1 строку?
Вы можете добавить к строке
Этот код никогда не должен завершаться. scanner.Scan возвращает истину до закрытия считывателя, но считыватель не закрывается до тех пор, пока не будет вызван Wait.
Вызов как Start, так и Output является избыточным.
Output runs the command and returns its standard output.
Start используется для асинхронного выполнения команды. Просто удалите этот вызов:
cmd := exec.Command("ftr", "get", "apps")
cmd.Dir = "./testdata/"
b, err := cmd.Output()
fmt.Println(string(b), err)