2009-05-28 23 views
7

Python'da bir program yazmaya çalışıyorum ve bir .exe dosyasını çalıştırması söylendi. Bu .exe dosyası çalıştırıldığında çok fazla veri tükürür ve ekrana yazdırılan belirli bir satıra ihtiyacım var. Eminim subprocess.popen ya da benzer bir şey kullanmam gerektiğinden eminim ama alt süreçlere yeniyim ve hiçbir fikrim yok. Bunu yapmak benim için kolay bir yol var mı? Teşekkürler!! BöyleBir alt işlemin stdout çıktısını nasıl alabilirim?

cevap

17

şey: Eğer süreç yürütülüyor tamamlandıktan sonra çıkış baskı ilgileniyorsanız

import subprocess 
process = subprocess.Popen(["yourcommand"], stdout=subprocess.PIPE) 
result = process.communicate()[0] 
+0

Belirli bir çizgiyi nasıl okurum? 0 olduğu yer burası mı? Ve evet işlem bittikten sonra çıktı çıktı almakla ilgileniyorum. Ayrıca "yourcommand" e sahip exe uzantısı oraya gidiyor mu? – Tyler

+1

"result", "yourcommand" ın tüm çıktısı olacaktır. Ardından, aradığınız çizgiyi bulmak için bu dizeyi (veya Py3.0'daki bayt nesnesini) işleyebilirsiniz. –

+3

[0], döndürülen tuple'ın ilk elemanı (stdout, stderr) anlamına gelir; Bir dizge olan sonucu istediğiniz gibi işleyebilirsiniz. belirli bir çizgiyi bulmak için. "Komutunuz", komutunuz * yoldaki * olmayan (en azından * nix) bir komutun tam yoludur. – miku

23

Paolo'nun çözümü @ mükemmeldir. İşlem çalışırken çıktıyı sorgulamak istediğinizde, bunu şu şekilde yapmanız gerekir:

process = subprocess.Popen(cmd, stdout=subprocess.PIPE) 

while True: 
    out = process.stdout.readline(1) 
    if out == '' and process.poll() != None: 
     break 
    if out.startswith('myline'): 
     sys.stdout.write(out) 
     sys.stdout.flush() 
İlgili konular