В Go выполнение внешних команд и управление их вводом и выводом — обычная задача. Однако при работе с командами, которые запрашивают ввод данных пользователем, например «вход в систему», может быть сложно автоматизировать эти вводы программно.
Один из подходов к этой проблеме — запись непосредственно в стандартный ввод команды (stdin ) с использованием байтового буфера. Давайте углубимся в предоставленное решение:
login := exec.Command(cmd, "login")
var b bytes.Buffer
b.Write([]byte(username "\n" pwd "\n"))
login.Stdout = os.Stdout
login.Stdin = &b
login.Stderr = os.Stderr
В этом коде мы создаем bytes.Buffer с именем b и объединяем имя пользователя и пароль с помощью символов новой строки. Затем мы присваиваем b полю Stdin команды входа в систему, эффективно подключая буфер к входному потоку команды.
Когда команда выполняется, она будет считывать символы из b до тех пор, пока не встретит новую строку, интерпретируя это как имя пользователя. Затем он будет читать до следующей новой строки, рассматривая ее как пароль. Записывая таким образом в буфер вручную, мы обходим необходимость взаимодействия с пользователем и предоставляем необходимые входные данные программным способом.
Помните, что стандартный ввод представляет собой буфер символов, и команды обычно считывают ввод до тех пор, пока не встречаются символы новой строки. Этот метод позволяет буферизировать и упорядочивать входные данные перед их передачей внешним командам, автоматизируя процесс ввода без необходимости ручного вмешательства пользователя.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3