Mysql Скрипт в Go с использованием exe c .Command - PullRequest
0 голосов
/ 08 января 2020

Я пытаюсь выполнить запрос MySQL, который выводит меня в виде CSV-файла в указанный каталог.

func executeCommand(){
    cmd := exec.Command("/usr/local/mysql/bin/mysql", "-e", "-hlocalhost", "-P3131", "-uroot", "-pmyPassword", "dbName",  "> /path/to/output/folder/fileName.csv")
    var out bytes.Buffer
    var stderr bytes.Buffer
    cmd.Stdout = &out
    cmd.Stderr = &stderr
    err = cmd.Run()
    if err != nil {
        fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
    }
    fmt.Println("Result: " + out.String())
}

Я получаю следующую ошибку:

состояние выхода 1: mysql: [Предупреждение] Использование пароля в интерфейсе командной строки может быть небезопасным.

Когда я удалил путь к выходному каталогу, ошибки не будет. Но мне нужен мой сгенерированный файл вывода в указанный каталог.

Я также попытался заменить > на source, но безуспешно. Кроме того, когда я запускаю то же самое в Терминале, он работает как положено, но мне не удается воспроизвести то же самое через Go.

/ usr / local / mysql / bin / mysql -e "select * from tableName" -u root -p -h localhost -P 3131 dbName> /path/to/output/folder/fileName.csv

Я попытался выполнить поиск по SO, но не смог найти ничего актуального. Любая помощь будет оценена.

1 Ответ

3 голосов
/ 08 января 2020

> является метасимволом оболочки для перенаправления вывода. Когда вы запускаете команду в оболочке, оболочка предварительно анализирует вашу команду и выполняет специальные действия с перенаправлением ввода / вывода. Он не передает метасимволы перенаправления в программу. Но когда вы используете exec.Command(), вы указываете только те аргументы, которые хотите передать команде.

Если вы хотите сохранить выходные данные команды, вам нужно работать с буфером cmd.Stdout.

См. Также Как выполнить Mysql Сценарий в golang с помощью exe c .Command

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