Передача нескольких команд и запись в файл - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь передать несколько *exec.Cmd и затем записать в файл. Когда я пытаюсь с одним cmd и выводить в файл, он пишет в файл. Однако, когда я пытаюсь с несколькими командами и вывод в файл, это не так. Но, похоже, exec.Cmd работает правильно, так как он может корректно выводиться.

outfile, err := os.Create("./out.txt")
if err != nil {
    panic(err)
}
defer outfile.Close()

c1 := exec.Command("sh", "-c", "while sleep 1; do echo test; done")
c1.Stdout = outfile
_ = c1.Run()

for {

}

Этот код выше записывает в файл каждую секунду. Но когда я пытаюсь это:

outfile, err := os.Create("./out.txt")
if err != nil {
    panic(err)
}
defer outfile.Close()

c1 := exec.Command("sh", "-c", "while sleep 1; do echo test; done")
c2 := exec.Command("grep", "t")
c2.Stdin, _ = c1.StdoutPipe()
c2.Stdout = outfile
_ = c2.Start()
_ = c1.Run()
c2.Wait()

Это ничего не выводит.

Но когда я изменяю c2.Stdout = outfile на c2.Stdout = os.Stdout, то выводится правильно

Я не могу понять, почему это происходит. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 17 ноября 2018

Итак, grep не замечает, что пишет в обычный файл.

Изменив эту строку с:

c2 := exec.Command("grep", "t")

к этому работает и пишет в файл правильно

c2 := exec.Command("grep", "t", "--line-buffered")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...