2009-05-28 19 views
7

Próbuję napisać program w Pythonie, a mi kazano uruchomić plik .exe. Kiedy ten plik .exe jest uruchamiany, wypluwa mnóstwo danych i potrzebuję określonej linii wydrukowanej na ekranie. Jestem prawie pewien, że muszę użyć subprocess.popen lub czegoś podobnego, ale jestem nowy w podprocesie i nie mam pojęcia. Każdy ma łatwy sposób, aby to zrobić?!? Dzięki!!Jak mogę uchwycić wyjście standardowe procesu potomnego?

Odpowiedz

17

coś takiego:

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

Jak odczytałbym określoną linię? czy to gdzie jest 0? I tak, jestem zainteresowany drukowaniem danych wyjściowych po zakończeniu procesu. Również tam, gdzie masz "twoją komendę", czy tam jest rozszerzenie exe? – Tyler

+1

"Wynik" będzie całkowitym wynikiem "twojej komendy". Następnie możesz przetworzyć ten ciąg (lub obiekt bajtów, w Py3.0), aby znaleźć szukaną linię. –

+3

[0] oznacza, że ​​pierwszy element krotki został zwrócony (stdout, stderr); możesz przetworzyć wynik, który będzie ciągiem, według własnego upodobania, np. znaleźć konkretną linię. "twoja komenda" to twoje pełne polecenie, ewentualnie pełna ścieżka do polecenia, jeśli polecenie nie * znajduje się na ścieżce * (przynajmniej na * nix). – miku

23

@ rozwiązania Paola jest idealne, jeśli jesteś zainteresowany wyjście drukowania po zakończeniu procesu wykonywania. Jeśli chcesz sondować dane wyjściowe podczas działania procesu, musisz wykonać to w następujący sposób:

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() 
Powiązane problemy