2010-03-15 63 views
9

Tôi cần lấy thời lượng của tệp video qua python như một phần của tập lệnh lớn hơn. Tôi biết tôi có thể sử dụng ffmpeg để lấy thời lượng, nhưng tôi cần để có thể lưu đầu ra đó như là một biến trở lại trong python. Tôi nghĩ rằng điều này sẽ hiệu quả, nhưng nó mang lại cho tôi một giá trị 0:Bất kỳ cách nào để gán đầu ra đầu cuối cho biến với python?

cmd = 'ffmpeg -i %s 2>&1 | grep "Duration" | cut -d \' \' -f 4 | sed s/,//' % ("Video.mov") 
duration = os.system(cmd) 
print duration 

Tôi có chuyển hướng đầu ra sai không? Hoặc là không có cách nào đơn giản để đường ống đầu ra thiết bị đầu cuối trở lại vào python?

Trả lời

17

os.system trả về giá trị trả lại cho biết thành công hoặc thất bại của lệnh. Nó không trả về kết quả từ stdout hoặc stderr. Để lấy đầu ra từ stdout (hoặc stderr), sử dụng subprocess.Popen.

import subprocess 
proc=subprocess.Popen('echo "to stdout"', shell=True, stdout=subprocess.PIPE,) 
output=proc.communicate()[0] 
print output 

Xem được viết tuyệt vời Python Module of the Week blog.

3

os.system trả về mã thoát của lệnh được thực hiện, không phải đầu ra của nó. Để thực hiện điều này, bạn sẽ cần phải sử dụng một trong hai commands.getoutput (phản đối) hoặc subprocess.Popen:

from subprocess import Popen, PIPE 

stdout = Popen('your command here', shell=True, stdout=PIPE).stdout 
output = stdout.read() 
2

nhiều cách đơn giản nhất

import commands 
cmd = "ls -l" 
output = commands.getoutput(cmd) 
+2

đơn giản, nhưng bị phản đối: https: // docs. python.org/2/library/commands.html –

0
import commands 
cmd = 'ls' 
output = commands.getoutput(cmd) 
print output 
Các vấn đề liên quan