SORU
1 Temmuz 2010, PERŞEMBE


Çalışan komut satırı Ruby script içinde komutları

Bir şekilde Ruby ile komut satırı komutları çalıştırmak için var mı? Dışarıyı ve/komut satırı programları gibi gönder alacağı küçük bir Ruby programı oluşturmak için çalışıyorum 'ekran', '', vb. rcsz

Eğer Ruby ile tüm bu (MySQL arka uç, vb.) kravat olabilir eğer çok iyi olurdu

CEVAP
1 Temmuz 2010, PERŞEMBE


Evet. Birkaç yolu vardır:

bir. %x kullanın veya "':

%x(echo hi) #=> "hi\n"
%x(echo hi >&2) #=> "" (prints 'hi' to stderr)

`echo hi` #=> "hi\n"
`echo hi >&2` #=> "" (prints 'hi' to stderr)

Bu yöntemler stdout dönün ve programın stderr için yönlendirir.

b. Kullanım system:

system 'echo hi' #=> true (prints 'hi')
system 'echo hi >&2' #=> true (prints 'hi' to stderr)
system 'exit 1' #=> nil

Bu yöntem, eğer komut başarılı olursa true döndürür. Programın tüm çıkış yönlendirir.

c. exec:

fork { exec 'sleep 60' } # you see a new process in top, "sleep", but no extra ruby process. 
exec 'echo hi' # prints 'hi'
# the code will never get here.

Bir komut tarafından oluşturulan geçerli sürecini değiştirir.

d. (ruby 1.9) spawn kullanın:

spawn 'sleep 1; echo one' #=> 430
spawn 'echo two' #=> 431
sleep 2
# This program will print "two\none".

Bu yöntem için işlem çıkış için bekleyin ve PID verir.

e. Kullanım IO.popen:

io = IO.popen 'cat', 'r '
$stdout = io
puts 'hi'
$stdout = IO.new 0
p io.read(1)
io.close
# prints '"h"'.

Bu yöntem, yeni işler' giriş/çıkış. reperesents IO bir nesne döndürür Ayrıca şu anda programa giriş yapmasını bildiğim tek yol bu.

f. Open3 (1.9.2 ve daha sonra) kullanın

require 'open3'

stdout,stderr,status = Open3.capture3(some_command)
STDERR.puts stderr
if status.successful?
  puts stdout
else
  STDERR.puts "OH NO!"
end

Open3 iki çıkış akışı için açık erişim almak için birçok diğer işlevleri vardır. Popen benziyor, ama sen stderr erişim sağlar.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Anthony Cumia

    Anthony Cumi

    5 EYLÜL 2006
  • Eddie Bravo

    Eddie Bravo

    17 EKİM 2006
  • fouseyTUBE

    fouseyTUBE

    21 Mart 2011