如何从 rake 任务中传递参数并从 Ruby/Rails 执行命令行应用程序?
具体来说,我正在尝试使用pdftk(我找不到类似的 gem)将一些 PDF 拆分为单独的页面。我想传递的参数在< >
以下范围内:
$ pdftk <filename.pdf> burst output <filename_%04d.pdf>
如何从 rake 任务中传递参数并从 Ruby/Rails 执行命令行应用程序?
具体来说,我正在尝试使用pdftk(我找不到类似的 gem)将一些 PDF 拆分为单独的页面。我想传递的参数在< >
以下范围内:
$ pdftk <filename.pdf> burst output <filename_%04d.pdf>
在您的 rake 任务的 ruby 代码中:
`pdftk #{input_filename} burst output #{output_filename}`
你也可以这样做:
system("pdftk #{input_filename} burst output #{output_filename}")
system()
只返回真或假。反引号或%x()
返回系统调用生成的任何输出。通常首选反引号,但如果您不在乎,则可以使用system()
. 我总是使用反引号,因为它更简洁。
更多信息在这里:http ://rubyquicktips.com/post/5862861056/execute-shell-commands
例如:
filename = 'filename.pdf'
filename_out = 'filename_%04d.pdf'
`pdftk #{filename} burst output #{filename_out}`
或者
system("pdftk #{filename} burst output #{filename_out}")
system
返回一个重新运行代码,反引号版本返回 STDOUT。
如果你需要标准输出和标准错误,你也可以使用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
}