Sto provando a scrivere un programma in Python e mi viene detto di eseguire un file .exe. Quando viene eseguito questo file .exe, sputa un sacco di dati e ho bisogno di stampare una determinata riga sullo schermo. Sono abbastanza sicuro di aver bisogno di usare subprocess.popen
o qualcosa di simile ma sono nuovo nel sottoprocesso e non ne ho idea. Qualcuno ha un modo semplice per farmi finire?!? Grazie!!Come posso acquisire l'output stdout di un processo figlio?
7
A
risposta
17
Qualcosa di simile a questo:
import subprocess
process = subprocess.Popen(["yourcommand"], stdout=subprocess.PIPE)
result = process.communicate()[0]
23
@ soluzione di Paolo è perfetto se siete interessati a stampa di uscita dopo che il processo è terminato l'esecuzione. Nel caso in cui si desidera eseguire il polling di uscita mentre il processo è in esecuzione quello che dovete fare in questo modo:
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()
Problemi correlati
- 1. Catturare lo stdout di un processo figlio con libuv
- 2. Come posso acquisire lo STDOUT di Perl in una variabile?
- 3. Come reindirizzare il processo figlio stdout/stderr nel processo principale stdout/stderr in Java?
- 4. Lo stdout del processo figlio NodeJS sono tutti i numeri
- 5. C# Leggi lo stdout del processo figlio in modo asincrono
- 6. Reindirizzare la pipa stdout del processo figlio in Go
- 7. In Erlang, come posso acquisire in modo indipendente lo stdout e lo stderr di un sottoprocesso?
- 8. Come acquisire l'output stdout/log di un agente in SLIME?
- 9. Come acquisire un processo STDOUT e STDERR riga per riga mentre si verificano, durante l'operazione di processo. (C#)
- 10. Come acquisire stdout/stderr con googletest?
- 11. osservando lo stdout di un altro processo
- 12. Come acquisire l'output stdout da una chiamata di funzione Python?
- 13. Reindirizzare l'output (stdout, stderr) di un processo figlio alla finestra Output in Visual Studio
- 14. Come passare STDIN al processo figlio?
- 15. Monitoraggio del decesso di un processo figlio
- 16. Utilizzo memoria di un processo figlio?
- 17. Come acquisire l'output del processo in modo asincrono in PowerShell?
- 18. Ottenere la forma di un processo figlio
- 19. Processo figlio multiplo
- 20. Come avviare correttamente un processo e inoltrare stdin/stdout/stderr?
- 21. pipe processo figlio stdout e stdin al browser in node.js e browserify
- 22. Come si de-elevare i privilegi di un processo figlio
- 23. Leiningen: come uccidere il processo figlio?
- 24. Processo figlio fork con timeout e output di acquisizione
- 25. Node.js: Cattura STDOUT di `child_process.spawn`
- 26. Come posso reindirizzare l'output dell'operazione exec ant su un file e su stdout?
- 27. Come eseguire i comandi tramite processo figlio NodeJS?
- 28. Leggi lo stdout di un altro processo in C++
- 29. Come ottenere il processo figlio dal processo principale
- 30. Come posso catturare lo stdout da un processo GIORNALMENTE in esecuzione
Come potrei leggere una certa linea fuori? è quello dove lo 0 è? E sì, mi interessa stampare l'output al termine del processo. Anche dove hai "yourcommand" l'estensione exe va lì? – Tyler
"risultato" sarà l'intero risultato di "tuo comando". È quindi possibile elaborare quella stringa (o oggetto byte, in Py3.0) per trovare la linea che stai cercando. –
il [0] indica il primo elemento della tupla restituita (stdout, stderr); puoi elaborare il risultato, che sarà una stringa, a tuo piacimento, ad es. per trovare una linea particolare. "yourcommand" è il comando completo, eventualmente un percorso completo per un comando se il comando ist non è * sul percorso * (almeno su * nix). – miku