我需要一种从控制台读取输入两次的方法(1 - 从cat
outupt,2 - 用户输入密码),如下所示:
cat ./test_data/test.txt | app account import
我当前的代码跳过密码输入:
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会完全重定向输入。
所以最简单的解决方案是:
将filename作为参数传递
重定向手动应用帐户导入< ./test.txt
答案 0 :(得分:1)
分别读取文件和密码(并且不显示密码),试试这个:
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))
}
首先是和go get github.com/howeyc/gopass
。