2011-09-09 20 views
7

可能重複:
Parsing a stdout in Python重定向子進程的變量作爲字符串

用下面的命令,它打印 '640×360'

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

640x360 

我怎麼設置一個變量等於輸出的字符串,所以我可以得到x='640x360'?謝謝。

更新:答案可以在這裏找到:Parsing a stdout in Python。這爲我工作:

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

回答

13

如果你使用2.7,你可以使用subprocess.check_output():

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

如果不是:

>>> 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

我只是輸入相同的答案,但只是想說,我建議使用Popen而不是調用,因爲它稍微更明確,並且執行相同的操作。 subprocess.call只是Popen的一個便利功能。 – Vorticity

+0

但call()打印輸出並返回進程的退出代碼,如果處理超過,則返回0。 – rocksportrocker

+0

這是我忘記的好點。鑑於此,在2.7之前call()可能是更好的方法,但Scott Anderson的答案可能在2.7中更好,因爲它會自動檢查名義退出狀態。 – Vorticity