2014-02-15 69 views
1

「目錄中沒有這樣的文件」我試圖自動獲取視頻screenlist當我把它上傳。但是,當我創建一個視頻實例時,我得到:和上傳文件

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

你能找出確切的目錄不能發現了什麼?路徑變量? – sergzach

+0

是的,當我在django shell中使用相同的路徑函數get_screenlist(不在保存方法內部)時,一切正常。 –

+0

輸出路徑變量的值。這可能是不正確的。 – sergzach

回答

0

首屆可能的原因

該文件存在,但仍鎖定一個父進程已創建文件或打開它,並具有該文件的鎖(順便說一句,你使用subprocess.check_output())。

之前,請與該文件進一步的行動,您應該解除鎖定。

第二屆原因可能

嘗試在該行改變保存=假保存=真

self.file.save(self.file.name, self.file, save=False) 
+0

'save = True'是故意的。沒有它,這個東西會自動遞歸調用,它永遠不會停止將文件的副本上傳到媒體目錄。無法說出任何關於鎖定的問題,我會考慮一下,謝謝。 –

+0

@DmitryMikhaylov任何方式最好在延遲任務中調用外部實用程序。以芹菜爲例。我敢肯定,如果你對這樣的事情使用延期任務,你就沒有這樣的問題。 – sergzach