我需要一种从控制台读取输入两次的方法(1 - 来自 cat
outupt,2 - 用户输入密码),如下所示:
cat ./test_data/test.txt |应用账号导入
我当前的代码跳过了密码输入:
reader := bufio.NewReader(os.Stdin)
raw, err := ioutil.ReadAll(reader)
if err != nil {
return cli.NewExitError(err.Error(), 1)
}
wlt, err := wallet.Deserialize(string(raw))
if err != nil {
return cli.NewExitError(err.Error(), 1)
}
fmt.Print("Enter password: ")
pass := ""
fmt.Fscanln(reader, &pass)
还尝试使用 Scanln
读取密码 - 无效。
注意:
cat
(和管道)不能用于用户输入,因为 shell 会完全重定向输入。
所以最简单的解决方案是:
将文件名作为参数传递
手动重定向应用程序帐户导入<./test.txt
最佳答案
分别读取文件和密码(不显示密码),试试这个:
package main
import (
"fmt"
"io/ioutil"
"log"
"github.com/howeyc/gopass"
)
func main() {
b, err := ioutil.ReadFile("./test_data/test.txt") // just pass the file name
if err != nil {
fmt.Print(err)
}
fmt.Println(string(b))
fmt.Print("Password: ")
pass, err := gopass.GetPasswd()
if err != nil {
log.Fatalln(err)
}
fmt.Println(string(pass))
}
和首先访问github.com/howeyc/gopass
。
关于shell - 在 Go 中通过管道命令从控制台读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46883050/