হ্যাঁ. বিভিন্ন উপায় আছে:
ক। ব্যবহার করুন %x
বা '`':
%x(echo hi)
%x(echo hi >&2)
`echo hi`
`echo hi >&2`
এই পদ্ধতিগুলি stdout ফিরিয়ে দেবে, এবং স্টাডারকে প্রোগ্রামের দিকে পুনর্নির্দেশ করবে।
খ। ব্যবহার system
:
system 'echo hi'
system 'echo hi >&2'
system 'exit 1'
true
কমান্ডটি সফল হলে এই পদ্ধতিটি ফিরে আসে । এটি প্রোগ্রামের সমস্ত আউটপুট পুনঃনির্দেশ করে।
গ। ব্যবহার exec
:
fork { exec 'sleep 60' }
exec 'echo hi'
যা কমান্ড দ্বারা তৈরি করা বর্তমান প্রক্রিয়াটিকে প্রতিস্থাপন করে।
d। (রুবি 1.9) ব্যবহার spawn
:
spawn 'sleep 1; echo one'
spawn 'echo two'
sleep 2
এই পদ্ধতিটি প্রক্রিয়াটি প্রস্থান হওয়ার জন্য অপেক্ষা করে না এবং পিআইডি ফিরিয়ে দেয়।
e। ব্যবহার IO.popen
:
io = IO.popen 'cat', 'r+'
$stdout = io
puts 'hi'
$stdout = IO.new 0
p io.read(1)
io.close
এই পদ্ধতিটি এমন কোনও IO
বস্তু ফেরত দেবে যা নতুন প্রক্রিয়াগুলির ইনপুট / আউটপুট পুনরাবৃত্তি করে। প্রোগ্রামটি ইনপুট দেওয়ার জন্য এটি বর্তমানে কেবলমাত্র আমিই জানি।
চ। ব্যবহার করুন Open3
(1.9.2 এবং তারপরে)
require 'open3'
stdout,stderr,status = Open3.capture3(some_command)
STDERR.puts stderr
if status.successful?
puts stdout
else
STDERR.puts "OH NO!"
end
Open3
দুটি আউটপুট স্ট্রিমে সুস্পষ্ট অ্যাক্সেস পাওয়ার জন্য অন্যান্য বেশ কয়েকটি ফাংশন রয়েছে। এটি পপেনের মতো, তবে আপনাকে স্টাডারে অ্যাক্সেস দেয়।