Any way to assign terminal output to variable with

2019-03-26 06:03发布

I need to grab the duration of a video file via python as part of a larger script. I know I can use ffmpeg to grab the duration, but I need to be able to save that output as a variable back in python. I thought this would work, but it's giving me a value of 0:

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

Am I doing the output redirect wrong? Or is there simply no way to pipe the terminal output back into python?

6条回答
在下西门庆
2楼-- · 2019-03-26 06:39

os.system returns a return value indicating the success or failure of the command. It does not return the output from stdout or stderr. To grab the output from stdout (or stderr), use subprocess.Popen.

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

See the wonderfully written Python Module of the Week blog.

查看更多
爷、活的狠高调
3楼-- · 2019-03-26 06:40
import commands
cmd = 'ls'
output = commands.getoutput(cmd)
print output
查看更多
Lonely孤独者°
4楼-- · 2019-03-26 06:44

Much simplest way

import commands
cmd = "ls -l"
output = commands.getoutput(cmd)
查看更多
贪生不怕死
5楼-- · 2019-03-26 06:50

os.system returns the exit code of the executed command, not its output. To do this you would need to use either commands.getoutput (deprecated) or subprocess.Popen:

from subprocess import Popen, PIPE

stdout = Popen('your command here', shell=True, stdout=PIPE).stdout
output = stdout.read()
查看更多
冷血范
6楼-- · 2019-03-26 07:04

You probably want subprocess.Popen.

查看更多
迷人小祖宗
7楼-- · 2019-03-26 07:05
#!/usr/bin/python3
import subprocess 
nginx_ver = subprocess.getstatusoutput("nginx -v")
print(nginx_ver)
查看更多
登录 后发表回答