转到-在外部命令上写入stdin

亚历山德罗·雷斯塔(Alessandro Resta)

我有以下代码,该代码执行外部命令并将两个字段输出到控制台,等待用户输入。一个用于用户名,另一个用于密码,然后我手动添加了它们。

谁能给我一个关于如何写stdin以便从程序内部输入这些输入的提示吗?

对我来说,棘手的部分是有两个不同的字段在等待输入,而我很难弄清楚如何一个接一个地填充。

login := exec.Command(cmd, "login")

login.Stdout = os.Stdout
login.Stdin = os.Stdin
login.Stderr = os.Stderr

err := login.Run()
if err != nil {
    fmt.Fprintln(os.Stderr, err)
}

解决方案:

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为此使用a 像这样的东西:

login := exec.Command(cmd, "login")

buffer := bytes.Buffer{}
buffer.Write([]byte("username\npassword\n"))
login.Stdin = &buffer

login.Stdout = os.Stdout
login.Stderr = os.Stderr

err := login.Run()
if err != nil {
    fmt.Fprintln(os.Stderr, err)
}

诀窍是,stdin它只是一个char缓冲区,并且在读取凭据时,它只会读取chars直到遇到一个\n字符(或者可能是\n\r)。因此,您可以预先将它们写入缓冲区,然后将缓冲区直接输入命令。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

转到命令错误

来自分类Dev

转到:运行外部Python脚本

来自分类Dev

转到:命令行标志

来自分类Dev

使Cakephp按钮转到外部链接

来自分类Dev

转到执行功能的命令正确吗?

来自分类Dev

多行ksh命令只是转到新行

来自分类Dev

多行ksh命令只是转到新行

来自分类Dev

转到可执行命令所在的目录

来自分类Dev

Bash 跳转到命令中的单词

来自分类Dev

rootFrame.Navigate上的AccessViolationException转到MainPage

来自分类Dev

如何在20.04上转到Grub菜单?

来自分类Dev

如何在FlowDocumentReader上转到特定页面?

来自分类Dev

如何从Codepen转到在PC上本地运行

来自分类Dev

在Perl中将一些命令转到shell命令

来自分类Dev

转到:使用Windows-1252编码写入文件

来自分类Dev

无法使用href或ng-href转到外部网址

来自分类Dev

如何使用 Django 从您的 API 转到特定的外部 URL?

来自分类Dev

禁用GUI并转到命令行终端

来自分类Dev

从命令窗口跳转到simulink模型块

来自分类Dev

emacs头盔Mx:如何跳转到历史命令列表

来自分类Dev

CMD(命令提示符)无法转到桌面

来自分类Dev

禁用GUI并转到命令行终端

来自分类Dev

运行unix命令以在C#中使用SharpSSH转到目录

来自分类Dev

从命令窗口跳转到simulink模型块

来自分类Dev

转到命令的控制台输出的第一行

来自分类Dev

如何强制回调绘图命令转到所需的图形窗口?

来自分类Dev

dd命令是否会跳转到emmc的坏块?

来自分类Dev

禁用GUI并转到命令行终端

来自分类Dev

如何在Mac上的vscode中“跳转到源代码”?