处理子进程文件输出

Posted

技术标签:

【中文标题】处理子进程文件输出【英文标题】:handling subprocess file output 【发布时间】:2019-06-08 17:08:52 【问题描述】:

我正在开发一个项目,在该项目中,用户有时会上传视频,而在后端我必须为该视频生成缩略图。为此,我更喜欢 ffmpeg,并且系统处于 django 环境中。 这是我的视图函数

def upload(request):
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            newdoc = Document(docfile=request.FILES['docfile'])
            filename = str(request.FILES['docfile'].name)
            newdoc.save()
            op = subprocess.call(['ffmpeg', '-i',"media/private/"+up, '-ss', '00:00:03.000', '-vframes', '1', 'abc.jpg']) // Generates thumbnail
            newdoc.thumbnail = op
            newdoc.save()
            return HttpResponseRedirect(reverse('list'))
    else:
        form = DocumentForm()

文档有缩略图字段。我知道 subprocess.call() 返回的返回码不是任何对象,所以使用 op 变量是没用的。所以我的查询是如何在模型中保存生成的缩略图。

【问题讨论】:

【参考方案1】:

FieldFile 的django documentation 中所述,您可以从保存文件的路径打开文件并将其包装到File 对象中。

另一个考虑是不要调用子进程,而是使用 python 库。还有用于 ffmpeg 的 python 绑定,例如ffmpeg-python.

【讨论】:

以上是关于处理子进程文件输出的主要内容,如果未能解决你的问题,请参考以下文章

使用文件作为子进程的标准输入和标准输出

golang如何获取子进程的实时输出

如何获取子进程的输出

从提升的子进程获取错误和标准输出

为远程进程的子进程捕获标准输出

检查 python 中正在运行的子进程的标准输出