Ruby / Rails:从rake任务传递参数到命令行应用程序

时间:2012-09-14 21:24:26

标签: ruby-on-rails ruby pdftk

如何从rake任务中传递参数并从Ruby / Rails执行命令行应用程序?

具体来说,我正在尝试使用pdftk(我找不到类似的宝石)将一些PDF分成单独的页面。我想传递的Args在< >以下:

$ pdftk <filename.pdf> burst output <filename_%04d.pdf>

2 个答案:

答案 0 :(得分:1)

在rake任务的ruby代码中:

`pdftk #{input_filename} burst output #{output_filename}`

你也可以这样做:

system("pdftk #{input_filename} burst output #{output_filename}")

system()只返回true或false。反引号或%x()返回系统调用生成的任何输出。通常首选反引号,但如果您不在乎,则可以使用system()。我总是使用反引号,因为它更简洁。

此处有更多信息:http://rubyquicktips.com/post/5862861056/execute-shell-commands

答案 1 :(得分:1)

e.g。为:

filename = 'filename.pdf'
filename_out = 'filename_%04d.pdf'

`pdftk #{filename} burst output #{filename_out}`

system("pdftk #{filename} burst output #{filename_out}")

system返回一个返回码,反引号版本返回STDOUT。

如果你需要stdout和stderr,你也可以使用Open3.open3

filename = 'filename.pdf'
filename_out = 'filename_%04d.pdf'
cmd = "pdftk #{filename} burst output #{filename_out}"

require 'open3'
Open3.popen3(cmd){ |stdin, stdout, stderr|
  puts "This is STDOUT of #{cmd}:"
  puts stdout.read
  puts "This is STDERR of #{cmd}:"
  puts stderr.read
}