выходной файл Trollop со стандартным выводом по умолчанию - PullRequest
1 голос
/ 06 февраля 2011

Как лучше всего указать выходной файл, но по умолчанию использовать 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 голосов
/ 07 февраля 2011

Глядя на код в 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")
...