我上传时会尝试自动获取视频的屏幕列表。但是当我创建一个Video实例时,我得到了:
OSError at /admin/videos/video/add/
[Errno 2] No such file or directory
我无法弄清楚为什么我会收到此错误,因为文件在那里。
这是模特:
class Video(models.Model):
file = models.FileField(upload_to='videos/videos')
screenlist = models.ImageField(upload_to='videos/screenlists', editable=False)
def save(self, force_insert=False, force_update=False, using=None,
update_fields=None):
if self.pk is None:
self.file.save(self.file.name, self.file, save=False)
screenlist_path = get_screenlist(self.file.path.encode('utf-8'))
self.screenlist = File(open(screenlist_path))
video_info = get_video_info(self.file)
self.duration = get_duration(video_info)
super(Video, self).save(force_insert, force_update, using, update_fields)
这是get_screenlist方法中的字符串,其中发生异常:
info = subprocess.check_output([
'ffprobe', '-loglevel', 'error', '-show_format',
'-show_streams', path, '-print_format', 'json'],
stderr=subprocess.STDOUT
)
答案 0 :(得分:0)
第一个可能的原因
该文件存在,但仍由已创建文件或打开文件的父进程锁定,并锁定此文件(顺便提一下,您使用 subprocess.check_output())。
您应该在对文件采取进一步措施之前解除锁定。
第二个可能的原因
尝试在行中将保存=错误更改为保存=真:
self.file.save(self.file.name, self.file, save=False)