2011-05-19 17 views
7

Python'dan ikili dosyaları çalıştırmak için altişlemci modülünü kullanıyorum. o tamamladığından SONRA bunlar neStytut için Python alt işlem çıktısı

proc = subprocess.Popen (command_args, shell=False, stdout=subprocess.PIPE) 
out = proc.communicate()[0] 
#print the output of the child process to stdout 
print (out) 

baskı sürecinin çıktısı:

kullanıyorum, ikili tarafından üretilen çıktıyı yakalamak için. Program çıktığında bu çıktıyı stdout'a basabiliyorum zaten var mı? Çıktının ne olduğunu görmem gerekiyor çünkü bu programlar uzun süre çalışabilir.

Yardımlarınız için teşekkürler.

+0

Boşver adamlar, ben çözüm buldum: 'Temel olarak 3 seçenek vardır: kullanın parçacığı başka bir iş parçacığı okumak Ana parçacığı engellemeden. iletişim kurmak yerine stdout, stderr seçeneğini seçin. Bu sayede sadece veri mevcut olduğunda okuyabilir ve engellemekten kaçınabilirsiniz. Bir kütüphaneyi bunu çözelim, twisted açık bir seçimdir. ' – therealtypon

+4

http://stackoverflow.com/questions/4585692/python-nonblocking-subprocess-check-stdout/4585898#4585898 gibi başka bir yanıt bulursanız, lütfen bağlantıyı tıklayın. cevabını yorum olarak kendi sorusuna kopyalamak yerine. – phooji

+0

Bunun için üzgünüz. Ben yorumda nokta stackoverflow.com/questions/4585692/…distile özü olduğunu düşündüm Bu sefer aklımızda tutacağım – therealtypon

cevap

7

Basitçe bir boruya çıktı gönderme:

proc = subprocess.Popen (command_args, shell=False) 
proc.communicate() 
+2

Bu işe yaramazsa: iletişim döndürür (Yok, Yok) – josh

+2

Bu beklenen ve kodun sonucu bir değişkende saklamamasının nedeni. Çıktıyı bir boruya göndermediğimizden, alt süreç mevcut süreçten stdout'u devralır, yani her şey doğrudan terminale basılacaktır. –

+0

Üzgünüm, haklısın - Soruyu yeterince okumamıştım, yapmak istediğimi yapmak istediğini, yani hem gerçek zamanlı çıktıyı, hem de çıktıyı yakalamayı istedim. Daha sonra – josh

İlgili konular