2015-02-06 107 views
0

有没有办法在另一个ruby脚本b内调用ruby脚本a?我有一个红宝石脚本执行网站登录(login.rb)和另一个脚本order_create.rb。我想先致电login.rb,然后再执行order_create.rb。请建议。 Order_Created.rb: -如何运行多个ruby脚本?

@@order_data = YAML.load(File.open'C:\Users\order_details.yaml')              def fill_order_form(order_data) 
    fill_in 'Firstname', :with => order_data['firstname'] 
    fill_in 'Lastname', :with => order_data['lastname'] 
    fill_in 'ZIP', :with => order_data['zip'] 
    click_button 'Continue' 

    end 

order_detail.yaml: -

firstname: "Order" 
lastname: "Test" 
zip: "90341" 

login.rb: -

require './order_create.rb' 
def login 
    #login code here 
    fill_order_form(@@order_data) 
end 

Error on running login.rb :- undefined method `fill_order_form' for #<#<Class:0x3e344e0>:0x4248ba0> 
+0

这取决于你的意思是“呼叫”。 'require'将在当前的Ruby进程中执行脚本,'system'会打开一个新的进程,你可以运行该脚本(并提供进程级别的参数),'Open3'会让你打开一个新的进程来执行你可以管输入输出到的脚本等 – Ajedi32 2015-02-06 19:08:29

回答

0

类似(尽管不同)的问题已经在得到回答:Running another ruby script from a ruby script

您可以包含您想调用的脚本在你的脚本:

require './b.rb' #if b.rb is in the same directory 

,并称之为:

b(args) 

您例如,你可以做到以下几点:

login.rb

require './order_create.rb' 
def login 
    #login code here 
    order_create() 
end 

假设你的create_order.rb包含def create_order()

+0

得到这个错误:----'require':无法加载这样的文件 - Login.rb(LoadError) – Anusha 2015-02-06 19:09:13

+0

@Anusha如果'create_order.rb'与'login.rb'在同一个文件夹中,那么你可以使用'require _relative'order_create''。相同的地方,你要求'login.rb' – 2015-02-06 19:36:23

+0

@CharlesCaldwell修复谢谢 – challett 2015-02-06 19:38:50

0

即使可以使用反引号或%×

`ruby yourscript.rb` 
%x(ruby yourscript.rb) 

在这种情况下,它是不是好主意执行任何shell命令,因为你有解决这个传统的方法,创建第三个脚本,说login_and_order.rb和把下面的代码放在里面:

require_relative 'login.rb' 
require_relative 'order_create.rb' 

# run your methods from both scripts in sequence you need 
# or if they are just set of commands, nothing else needed 
+0

谢谢! 。我现在可以在另一个ruby脚本(login.rb)中调用脚本order_create.rb。但无法调用order_create.rb中定义的方法。收到错误: - 未定义的局部变量或方法'order_data'。 Order_Created.rb是这样的: - @@ order_data = YAML.load(File.open'C:\ Users \ order_details.yaml') def fill_order_form(order_data) (已定义yaml文件中的所有字段) 可以吗?请提出如何处理这个问题。 – Anusha 2015-02-06 19:54:55

+0

@Anusha所以你把它叫做'order_data'?但'@@ order_data'不是方法,它是类变量(尽管我无法理解为什么在类的外部使用它) – 2015-02-06 19:59:32

+0

我在login.rb中将它称为fill_order_form(order_data)。 fill_order_form(order_data)在create_order.rb中定义。 – Anusha 2015-02-06 20:13:05