我想编写一个ruby脚本,然后调用另一个ruby脚本。 例如,我想从我的脚本运行“test1.rb”。 test1.rb已简化为执行此操作:
print "1"
然后得到结果( - > 1)。
我试图用反引号或其他执行命令(%x [#{“test1.rb”}],系统(“test1.rb”)等完成此问题,但它不起作用。
所以任何想法我如何调用一个脚本然后调用另一个脚本(放弃总控制或分叉),并获得结果?
由于
答案 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”)设置为变量。
我是怎么做到的?使用反引号可以做到这一点吗?