如何在Python中处理管道和输出?

2024-09-30 20:33:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在python脚本中执行以下命令:

avprobeCommand = "avprobe -of json -show_streams {0} | grep '\"duration\"' | sed -n 1p | sed 's/ //g'".format(hiOutput)
output = subprocess.check_output([avprobeCommand])

我一直得到:

^{pr2}$

我已经尝试过拆分参数,但是我一直在获取-of json-show\u streams部分的错误,根据记录,如下所示:

subprocess.check_output(["avprobe", "-of json", "-show_streams", "{0}".format(hiOutput)

Tags: of命令脚本jsonformatoutputcheckshow
2条回答

在您的例子中,您可以将后处理转移到Python中:

import json
from subprocess import check_output as qx

data = json.loads(qx(["avprobe", "-of", "json", "-show_streams", hiOutput]))
result = data["duration"]         # grep '"duration"'
             .partition("\n")[0]  # sed -n 1p
             .replace(" ", "")    # sed 's/ //g'

有关更一般的情况,请参见How do I use subprocess.Popen to connect multiple processes by pipes?

将命令作为字符串传递,并传递shell=True

import pipes
import subprocess

avprobeCommand = """avprobe -of json -show_streams {0} | grep '"duration"' | sed -n 1p | sed 's/ //g'""".format(pipes.quote(hiOutput))
output = subprocess.check_output(avprobeCommand, shell=True)

更新:应使用^{}对参数进行转义。(如果使用python3.3+,请使用^{}。在

相关问题 更多 >