Перехват вывода консоли удаленного хоста golang
Подскажите, пожалуйста, как читать вывод выполнения bash скрипта построчно(в режиме реального времени) удаленного хоста и "выплевывать" в свою консоль(файл) каждую строку, ну или же через 2-3 секунды?
import (
"bytes"
"os"
"log"
"github.com/helloyi/go-sshclient"
)
func SshClientRunCommands(script string) {
f2, err := os.OpenFile("1.log", os.O_WRONLY, 0666)
client, err := sshclient.DialWithKey("удаленный хост", "root", "путь к ключу")
if err != nil {
handleError(err)
}
defer client.Close()
client.Script(script).Run()
out, _ := client.Script(script).Output()
defer f2.Close()
logger:= log.New(f2, "", log.LstdFlags)
logger.Println(out)
}
Ответы (1 шт):
Автор решения: Senior Pomidor
→ Ссылка
не используйте panic(err) как в этом ответе в своем приложении.
я немного зарефакторил ваш метод. в вашем примере вы 2 раза запускаете скрипт.
func main() {
SshClientRunCommands("ls -al / && sleep 5 && ls -al /home")
}
func SshClientRunCommands(script string) {
f2, err := os.OpenFile("1.log", os.O_WRONLY, 0666)
if err != nil {
panic(err)
}
defer f2.Close()
client, err := sshclient.DialWithKey("удаленный хост", "root", "путь к ключу")
if err != nil {
panic(err) // можно заменить на handleError(err)
}
defer client.Close()
remoteScript := client.Script(script) // создаем сущность sshclient.RemoteScript, которая отвечает за удаленный запуск
remoteScript.SetStdio(os.Stdout, os.Stderr) // указываем output скрипта. тут будет писать каждый раз, когда скрипт напечатает что-либо
err = remoteScript.Run() // запуск скрипта
if err != nil {
panic(err)
}
}
в моем ответе выхлоп печатается в Stdout, так как так нагляднее, но если вам надо писать в файл, то можете заменить на remoteScript.SetStdio(f2, f2)