2011-09-09 41 views
7

thể trùng lặp:
Parsing a stdout in PythonRedirect subprocess cho một biến như là một chuỗi

Với lệnh sau, nó in '640x360'

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

640x360 

Làm thế nào tôi sẽ thiết lập một biến bằng chuỗi đầu ra, vì vậy tôi có thể nhận được x='640x360'? Cảm ơn bạn.

Cập nhật: câu trả lời có thể tìm thấy tại đây: Parsing a stdout in Python. Điều này làm việc cho tôi:

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

Trả lời

13

Nếu bạn đang sử dụng 2.7, bạn có thể sử dụng subprocess.check_output():

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

Nếu không:

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

Tôi chỉ gõ câu trả lời tương tự, nhưng chỉ muốn nói rằng tôi muốn đề nghị sử dụng Popen thay vì gọi vì nó hơi rõ ràng hơn và làm điều tương tự. subprocess.call chỉ là một chức năng thuận tiện cho Popen. – Vorticity

+0

nhưng gọi() in đầu ra và trả về mã thoát của quá trình của bạn, đó là 0 nếu bạn xử lý thành công. – rocksportrocker

+0

Đó là một điểm tốt mà tôi đã quên. Cho rằng, gọi() có thể là cách tốt hơn để đi trước 2,7, nhưng câu trả lời của Scott Anderson có khả năng là tốt hơn trong 2,7 vì nó tự động kiểm tra trạng thái thoát danh nghĩa. – Vorticity

Các vấn đề liên quan