trollop输出文件,默认为stdout

时间:2011-02-06 11:11:27

标签: ruby stdout options

可选择指定输出文件但默认使用stdout的最佳方法是什么?

现在我正在尝试:

opts = Trollop::options do
  opt :output, "Output File", :default => $stdout
  opt :input, "Input File", :default => $stdin
end

但是当我尝试使用它时,我得到了:

$ ./test.rb -o temp.txt
Error: file or url for option '-o' cannot be opened: No such file or directory - temp.txt.
Try --help for help.

显然,我不想在运行脚本之前要求输出文件存在。

(另外,我指定输入的方式还可以吗?)

1 个答案:

答案 0 :(得分:0)

查看trollop中的代码(特别是parse_io_parameter)我相信目前,trollop(版本1.16.2)假设任何IO类型参数(如问题中所示)被假定为输入

解决方法如下。

使用String在trollop中指定输出文件:

opts = Trollop::options do
  opt :input, "Input File", :default => $stdin
  opt :output, "Output File", :default => "<stdout>"
end

根据解析的参数创建输出对象(out):

out = if opts[:output] =~ /^<?stdout>?$/i
  $stdout
else
  fd = IO.sysopen(opts[:output], "w")
  a = IO.new(fd, "w")
end

然后你可以像这样使用它:

out.puts("this text gets written to output")