我最近开始使用Trollop,这是一个干净而优雅的命令行选项解析器,用于我所有基于Ruby的小型命令行黑客攻击。我发现它真的很容易使用,但是开始很难:尽管有良好的在线文档,但没有任何东西能够展示如何将Trollop整合到一个完整的脚本中。
问:如何将Trollop整合到我的Ruby命令行程序中?
答案 0 :(得分:2)
答:这是一个独立的例子。
if __FILE__ == $0
的商家并非特定于Trollop;这只是意味着“如果此文件作为脚本执行,则运行以下代码”。此技术允许您将文件用作库模块,将业务逻辑与命令行解析分开。
#!/usr/bin/env ruby
#
# This is a near-minimal ruby script to demonstrate trollop, a simple
# and elegant command-line parsing package. To run, copy this file to
# 'trollop_demo.rb' and make it executable by
# $ chmod +x trollop_demo.rb
# Then run it via:
# $ ./trollop_demo.rb <your args here>
# For more info on Trollop, see http://trollop.rubyforge.org/
require 'trollop'
# A trivial program...
def main_method(filename, options)
puts("filename = #{filename}, options = #{options}")
end
# Execute this part when the file is run as a script
if __FILE__ == $0
opts = Trollop::options do
version "#{$0} Version 3.14159 (C) 2041 Spacely Sprockets, Inc."
banner <<-EOS
#{$0} is a command-line program to demonstrate trollop
Usage:
#{$0} [options] <filename>
where [options] are zero or more of:
EOS
opt :verbose, "Print extra information."
opt :dry_run, "Don't actually do anything.", :short => "-n"
end
filename = ARGV.shift
if (filename.nil?) || (!File.exist?(filename))
Trollop::die "filename must be given and name an existing file"
else
main_method(filename, opts)
end
end
只需要一点代码,您就可以尝试所有这些:
$ ./trollop_demo.rb
$ ./trollop_demo.rb a_file_that_doesn't_exist
$ ./trollop_demo.rb --version
$ ./trollop_demo.rb --help
$ ./trollop_demo.rb trollop_demo.rb
$ ./trollop_demo.rb --dry-run trollop_demo.rb
$ ./trollop_demo.rb --no-dry-run trollop_demo.rb
$ ./trollop_demo.rb --verbose trollop_demo.rb
$ ./trollop_demo.rb -v trollop_demo.rb
有关详细信息,请参阅http://trollop.rubyforge.org/