可选择指定输出文件但默认使用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.
显然,我不想在运行脚本之前要求输出文件存在。
(另外,我指定输入的方式还可以吗?)
答案 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")