2015-02-06 155 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