我有以下测试代码。
require "thor"
module Snap
class CLI < Thor
desc 'login', 'Login Credentials'
def login(user,pass)
@username = user
@password = pass
say @password
end
desc 'block', 'Block user'
def block(input)
say @username
end
end
end
如果我在命令行中输入Snap login abc xyz。 我得到输出为xyz。 但是当我输入Snap block a时。 我得到的输出只是一个空白区域。 即:没有任何东西存储在用户名或密码。
为什么会这样,我该如何解决?
答案 0 :(得分:2)
问题是程序在两次命令调用之间终止。因此,所有状态都会丢失,因此用户名将丢失。
为了在您的命令的多个调用中保留变量,您需要将其保存到文件中。例如,您可以以yaml格式将隐藏文件保存在用户的主目录中。
注意:请注意,这会将密码以明文形式存储在配置文件中!
require 'thor'
require 'yaml'
module Snap
class CLI < Thor
def initialize(*args)
super
read_config
end
desc 'login', 'Login Credentials'
def login(user, pass)
@username = user
@password = pass
say @password
write_config
end
desc 'block', 'Block user'
def block(input)
say @username
end
private
CONFIG_FILE = '~/.myprogram.conf'
def write_config
config = {}
config['username'] = @username
config['password'] = @password
File.open(CONFIG_FILE, 'w') do |f|
f.write config.to_yaml
end
end
def read_config
config = YAML.load_file(CONFIG_FILE)
@username = config['username']
@password = config['password']
end
end
end