Ruby - 从脚本运行rb文件

时间:2015-05-29 13:22:05

标签: ruby file

我想编写一个ruby脚本,然后调用另一个ruby脚本。 例如,我想从我的脚本运行“test1.rb”。 test1.rb已简化为执行此操作:

print "1"

然后得到结果( - > 1)。

我试图用反引号或其他执行命令(%x [#{“test1.rb”}],系统(“test1.rb”)等完成此问题,但它不起作用。

所以任何想法我如何调用一个脚本然后调用另一个脚本(放弃总控制或分叉),并获得结果?

由于

4 个答案:

答案 0 :(得分:3)

您可以简单地要求该文件,该文件将加载代码并执行它:

require_relative "path/test1"

为了控制运行代码,我建议将脚本放在一个方法中:

# In test1.rb
def exec_my_script
 puts 1
end

# In your main script
require_relative "path/test1"
exec_my_script

编辑:好的,因为这对您的用例似乎不起作用,您可以将该文件读取为字符串并按如下方式评估该字符串:

result = eval(File.read("path/test1.rb"))
# do something with result

我不喜欢这种方法,因为它感觉有点“hacky”并且无论如何都是不安全的,只有在test1脚本中调用的最后一个东西返回你需要的结果时它才会起作用...

答案 1 :(得分:1)

您可能想要使用open3

require 'open3'
cmd = 'ruby test1.rb'
#You may change the contents of cmd like you would run it from the command line; like ruby [directory]/filename
Open3.popen3(cmd) do |stdin, stdout|
  var = stdout.read
  puts var
end

答案 2 :(得分:0)

system('ruby test1.rb') # should do the trick

您还可以使test1可执行(使用chmod)并在test1之上添加shebang行。

然后你可以打电话

system("./test1.rb")

答案 3 :(得分:0)

好的,系统('ruby test1.rb')和系统(“ruby”,“test1.rb”)命令有效。

现在,我想将返回值(“1”)设置为变量。

我是怎么做到的?使用反引号可以做到这一点吗?