2012-06-15 10 views
5
Ben bir yakut tırmık komut bir yürütülebilir çalıştırmak istediğiniz

mevcut, yakut bir işlem üretmekten stdout'u yakalayan, stderr'si alma, durum

foo.exe ben foo.exe den STDOUT ve STDERR çıkışları doğrudan yazılacak istediğini söylüyorsun konsol komisyon görevini çalıştırıyorum.

İşlem tamamlandığında, çıkış kodunu bir değişkene almak istiyorum. Bunu nasıl başarabilirim?

Ben system, process.spawn, backticks ile oynamaya oldum ama istediğim tüm davranışlarını, sadece parçalar uyuyamıyrom

Güncelleme: Ben standart komut isteminde, değil

cygwin, Windows üzerinde olduğum
+0

Bunun hangi kısmı "Kernel # system" tarafından kapsanmıyor? –

+0

OpenSSL ile çalışan Net-SSH' saf ruby ​​lib'in böyle bir işleve sahip olduğunu biliyoruz. '' Exec' yöntemi 'channel'' '[stdout, stderr, exit_code, exit_signal]' dizisini döndürür. Belki bir şekilde kullanabilirsiniz ... – Ribtoks

+0

Belki de bu komutların her biri ile sorunlarınızı listelemelisiniz? '2> & 1' için –

cevap

8

system test edemez diyor istediğiniz STDOUT davranışı alır: Eğer unixy kabuk içinde komut dosyasını çalıştırın eğer bunu yapabilirsiniz . Ayrıca sıfır çıkış kodu için yararlı olabilecek true değerini döndürür.

system 'foo.exe' 
$?.exitstatus 

Ben bir örnek için Runner.execute_command bu şeylerin bir arada kullandım: Eğer çıkış durumu kontrol böylece

$? son system çağrı hakkındaki bilgilerle doldurulur.

+0

, STDERR'e ihtiyaç duymadığı ortaya çıktı, bu yüzden bu _does_'un bunu ele aldığını doğrulayamıyorum, ancak ihtiyaçlarım için çalışıyor –

2

backticks stdout

foo.exe windows çalıştıran anlaşılacağı dize çıkan içine çekilen alacak - Eğer cygwin gibi bir şey yüklü var?

result = `foo.exe 2>&1` 
status = $?.exitstatus 

hızlı googling kabuk bu da yerli pencerelerde çalışmalıdır ama bu assupmtion

+0

+1, sinsi! –