2010-04-29 15 views
12

Ruby komut dosyasım, bir kabuk komutu çalıştırıyor ve çıktıyı buradan ayrıştırıyor. Ancak, komutun ilk çalıştırıldığı ve çıktının bir diziye kaydedildiği görülüyor. Çıktı çizgilerine, basılı oldukları gibi gerçek zamanlı olarak erişmek istiyorum. Konuyla uğraştım ama işe yaramadı. Baska öneri?Ruby, çıktı olarak kabuk komutlarından çıktılara erişebilir mi?

cevap

21

borular borularını arıyorsunuz. Daha sonra, çağrı yöntemleri/işlevleri sistemi/kabuk komutları çalıştırmak için

# This example runs the netstat command via a pipe 
# and processes the data in Ruby as it come back 

pipe = IO.popen("netstat 3") 
while (line = pipe.gets) 
    print line 
    print "and" 
end 
+0

Mükemmel cevap, çok teşekkürler! – Ciryon

+0

Çıktı aslında komut tamamlanana kadar arabelleğe alınır, sonra gerçek zamanlılığı önemsemezseniz çıktıyı görürsünüz. – user180574

0

, senin tercüman ve aynı işlemi bitirmek için bekler çalıştırmak için başka bir işlem olarak çoğaltılır size çıktıyı verir: İşte bir örnek.

İş parçacığı kullansanız bile, tek yapmanız gereken, komutunuzun çalışması sırasında programınızın askıda kalmasına izin vermemekle birlikte, çıktı bitene kadar çıktınız.

Sanırım bunu borularla gerçekleştirebilirsiniz, ancak nasıl yapacağımı bilmiyorum.

@Marcel bunu başardı.

İlgili konular