sistem
The system
pemanggilan metode program sistem. Anda harus memberikan perintah sebagai argumen string untuk metode ini. Sebagai contoh:
>> system("date")
Wed Sep 4 22:03:44 CEST 2013
=> true
Program yang dipanggil akan menggunakan objek saat ini STDIN
, STDOUT
dan STDERR
objek dari program Ruby Anda. Bahkan, nilai pengembalian aktualnya adalah true
, false
atau nil
. Dalam contoh tanggal dicetak melalui objek IO dari STDIN
. Metode akan kembali true
jika proses keluar dengan status nol, false
jika proses keluar dengan status tidak-nol dan nil
jika eksekusi gagal.
Efek samping lain adalah bahwa variabel global $?
diatur ke Process::Status
objek. Objek ini akan berisi informasi tentang panggilan itu sendiri, termasuk pengidentifikasi proses (PID) dari proses yang dipanggil dan status keluar.
>> system("date")
Wed Sep 4 22:11:02 CEST 2013
=> true
>> $?
=> #<Process::Status: pid 15470 exit 0>
Backticks
Backticks (``) memanggil program sistem dan mengembalikan hasilnya. Berbeda dengan pendekatan pertama, perintah tidak diberikan melalui string, tetapi dengan meletakkannya di dalam pasangan backticks.
>> `date`
=> Wed Sep 4 22:22:51 CEST 2013
Variabel global $?
diatur melalui backticks juga. Dengan backticks Anda juga dapat menggunakan interpolasi string.
% x ()
Menggunakan %x
adalah alternatif dari gaya backticks. Ini akan mengembalikan output juga. Seperti kerabatnya %w
dan %q
(antara lain), pembatas apa pun akan mencukupi selama pembatas braket cocok. Ini berarti %x(date)
, %x{date}
dan %x-date-
semuanya adalah sinonim. Seperti backticks %x
dapat menggunakan interpolasi string.
eksekutif
Dengan menggunakan Kernel#exec
proses saat ini (skrip Ruby Anda) diganti dengan proses yang diminta exec
. Metode ini dapat mengambil string sebagai argumen. Dalam hal ini string akan mengalami ekspansi shell. Ketika menggunakan lebih dari satu argumen, maka yang pertama digunakan untuk menjalankan suatu program dan berikut ini disediakan sebagai argumen untuk program yang akan dipanggil.
Open3.popen3
Terkadang informasi yang diperlukan ditulis ke input standar atau kesalahan standar dan Anda perlu mengontrolnya juga. Ini Open3.popen3
berguna:
require 'open3'
Open3.popen3("curl http://example.com") do |stdin, stdout, stderr, thread|
pid = thread.pid
puts stdout.read.chomp
end