2011-09-09 20 views
7

Eventuali duplicati:
Parsing a stdout in PythonRedirect sottoprocesso ad una variabile come una stringa

Con il seguente comando, stampa '640x360'

>>> command = subprocess.call(['mediainfo', '--Inform=Video;%Width%x%Height%', 
'/Users/david/Desktop/1video.mp4']) 

640x360 

Come vorrei impostare una variabile uguale alla stringa dell'output, quindi posso ottenere x='640x360'? Grazie.

Aggiornamento: le risposte possono essere trovate qui: Parsing a stdout in Python. Questo ha funzionato per me:

>>> p1 = subprocess.Popen(['mediainfo', '--Inform=Video;%Width%x%Height%', 
    '/Users/david/Desktop/10stest720p.mov'],stdout=PIPE) 
>>> output=p1.communicate()[0].strip('\n') 
>>> output 
'1280x688' 

risposta

13

Se si utilizza 2.7, è possibile utilizzare subprocess.check_output():

>>> import subprocess 
>>> output = subprocess.check_output(['echo', '640x360']) 
>>> print output 
640x360 

In caso contrario:

>>> p = subprocess.Popen(['echo', '640x360'], stdout=subprocess.PIPE) 
>>> p.communicate() 
('640x360\n', None) 
4
import subprocess 
p = subprocess.Popen(["ls", "-al"], stdout=subprocess.PIPE) 
out, err = p.communicate() 
print out 
+0

ero solo digitando la stessa risposta, ma volevo solo dire che suggerirei di usare Popen piuttosto che chiamare perché è leggermente più esplicito e fa la stessa cosa. subprocess.call è solo una comoda funzione per Popen. – Vorticity

+0

ma call() stampa l'output e restituisce il codice di uscita del processo, ovvero 0 se l'elaborazione è superata. – rocksportrocker

+0

Questo è un buon punto di cui mi ero dimenticato. Dato che, call() potrebbe essere il modo migliore per andare in pre 2.7, ma la risposta di Scott Anderson è probabilmente migliore in 2.7 poiché controlla automaticamente lo stato di uscita nominale. – Vorticity

Problemi correlati