我想寫一個ruby腳本,然後調用另一個ruby腳本。例如,我想從腳本運行「test1.rb」。 的test1.rb進行了簡化,只是這樣做:Ruby - 從腳本運行rb文件
print "1"
然後得到的結果( - > 1)。
我試圖用反引號或其他執行命令(%x [#{「test1.rb」}],system(「test1.rb」)等)完成此問題,但它不起作用。
因此,任何想法如何調用一個腳本,然後調用另一個腳本(要麼放棄總控制或分叉),並得到結果?
感謝
我想寫一個ruby腳本,然後調用另一個ruby腳本。例如,我想從腳本運行「test1.rb」。 的test1.rb進行了簡化,只是這樣做:Ruby - 從腳本運行rb文件
print "1"
然後得到的結果( - > 1)。
我試圖用反引號或其他執行命令(%x [#{「test1.rb」}],system(「test1.rb」)等)完成此問題,但它不起作用。
因此,任何想法如何調用一個腳本,然後調用另一個腳本(要麼放棄總控制或分叉),並得到結果?
感謝
您可能需要使用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
system('ruby test1.rb') # should do the trick
您也可以test1的可執行文件(用chmod),並添加Test1上頂部的家當線。
然後,您可以撥打
system("./test1.rb")
你可以簡單地要求的文件,這將加載代碼並執行:
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
編輯:好的,因爲這似乎並不爲你的用例工作,你可以讀取該文件作爲字符串和eval字符串像這樣:
result = eval(File.read("path/test1.rb"))
# do something with result
我不喜歡這種做法,因爲感覺有點「哈克」,並且通過一切手段是不安全的,它只會工作,如果在你的test1腳本中調用的最後一件東西返回你需要的結果...
我真的無法想象你會想以任何其他方式做到這一點。 +1 –
是的,這是一個好主意,但我無法修改測試文件。 –
我必須在腳本中調用更多相同的測試文件,並在運行後得到結果。 –
好吧,系統('ruby test1.rb')和系統(「ruby」,「test1.rb」)命令起作用。
現在,我想將返回值(「1」)設置爲一個變量。
我該怎麼做?反引號可以做到這一點嗎?
什麼了'系統( 「test1.rb」)'做什麼?你有沒有嘗試完全(絕對)路徑到'test.rb'? – shivam
你的意思是「它沒有工作」是什麼意思?我猜你的嘗試失敗,因爲在命令行鍵入'test1.rb'將不起作用:'test1.rb'不是一個可執行文件。您需要使用Ruby執行腳本(例如'system(「ruby」,「test1.rb」)'),或者使用'chmod'命令可執行文件並添加一個shebang行。 –