sistem
system
Yöntem, bir sistem programı çağırır. Bu yönteme dize bağımsız değişkeni olarak komut sağlamanız gerekir. Örneğin:
>> system("date")
Wed Sep 4 22:03:44 CEST 2013
=> true
Çağrılan programı akımını kullanır STDIN
, STDOUT
ve STDERR
senin Yakut programının itiraz ediyor. Aslında, gerçek dönüş değeri, bir true
, false
ya da nil
. Örnekte tarih, öğesinin IO nesnesi aracılığıyla yazdırılmıştır STDIN
. true
İşlem sıfır durumundan çıkmışsa, işlem sıfırdan farklı bir durumdan false
çıkmışsa ve nil
yürütme başarısız olursa yöntem döndürülür .
Diğer bir yan etki ise global değişkenin $?
bir Process::Status
nesneye ayarlanmış olmasıdır . Bu nesne, çağrılan işlemin süreç tanımlayıcısı (PID) ve çıkış durumu da dahil olmak üzere çağrının kendisi hakkında bilgi içerir.
>> system("date")
Wed Sep 4 22:11:02 CEST 2013
=> true
>> $?
=> #<Process::Status: pid 15470 exit 0>
backticks
Backticks (``) bir sistem programını çağırır ve çıktısını verir. İlk yaklaşımın aksine, komut bir dize ile değil, bir geri çene çifti içine yerleştirilerek sağlanır.
>> `date`
=> Wed Sep 4 22:22:51 CEST 2013
Global değişken $?
de ters çentiklerle ayarlanır. Backticks ile dize enterpolasyonunu da kullanabilirsiniz.
% X ()
Kullanmak %x
backticks tarzına bir alternatiftir. Çıktıyı da döndürür. Akrabaları %w
ve %q
(diğerleri arasında) gibi, ayraç tarzı sınırlayıcılar eşleştiği sürece herhangi bir sınırlayıcı yeterli olacaktır. Bu araçlar %x(date)
, %x{date}
ve %x-date-
tüm eş anlamlıdır. Backticks %x
gibi dize enterpolasyon kullanabilirsiniz.
exec
Kernel#exec
Geçerli işlemi kullanarak (Ruby betiğiniz) çağrılan işlemle değiştirilir exec
. Yöntem, bir dizeyi bağımsız değişken olarak alabilir. Bu durumda dize kabuk genişletmesine tabi olacaktır. Birden fazla argüman kullanıldığında, ilk program bir programı yürütmek için kullanılır ve aşağıdakiler çağrılacak programa argümanlar olarak sağlanır.
Open3.popen3
Bazen gerekli bilgiler standart girdiye veya standart hataya yazılır ve bunlar üzerinde de kontrol sahibi olmanız gerekir. İşte Open3.popen3
kullanışlı:
require 'open3'
Open3.popen3("curl http://example.com") do |stdin, stdout, stderr, thread|
pid = thread.pid
puts stdout.read.chomp
end