使用moviepy给出错误[Errno 13]权限被拒绝

时间:2015-12-04 00:16:02

标签: python django moviepy

视频文件上传

def upload_video( video ):
    video_name = "%d&&%s%s" % (int(round(time.time() * 1000)), "uservideo", os.path.splitext( video.name )[1])
    image_path = '%s/%s' % (DATA_ROOT, video_name)
    full_path = '%s%s' % (BASE_DIR, image_path)
    try:
        with open(full_path,'wb') as fp:
            for chunk in video.chunks():
                fp.write(chunk)

        os.chmod( full_path, 0666 )

    except Exception as err:

    return image_path

我需要视频文件上的缩略图

def ajax_videoUpload( request ):
    video = request.FILES[request.FILES.keys()[0]]


    videoPath = upload_video( video )
    fullPath = "%s%s" % ( BASE_DIR, videoPath )
    fileExt = os.path.splitext( videoPath )[1] # file extension
    clip = VideoFileClip( fullPath )
    fullPath = string.replace( fullPath, fileExt, ".png" )
    clip.save_frame( fullPath, t = 10.00 )
    thumbnailPath = string.replace( videoPath, fileExt, ".png" )

    return HttpResponse( thumbnailPath )

videoFileClip(fullPath)< - 给出错误

Traceback (most recent call last):
File "/opt/djangostack-1.8.3-0/apps/django/lib/python2.7/site-packages/Django-1.8.3-py2.7.egg/django/core/handlers/base.py", line 132, in get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/opt/djangostack-1.8.3-0/apps/django/lib/python2.7/site-packages/Django-1.8.3-py2.7.egg/django/views/decorators/csrf.py", line 58, in wrapped_view
return view_func(*args, **kwargs)
File "/opt/djangostack-1.8.3-0/apps/django/django_projects/tellpin/writingform/views.py", line 392, in ajax_videoUpload
clip = VideoFileClip( fullPath )
File "/opt/djangostack-1.8.3-0/python/lib/python2.7/site-packages/moviepy/video/io/VideoFileClip.py", line 55, in __init__
reader = FFMPEG_VideoReader(filename, pix_fmt=pix_fmt)
File "/opt/djangostack-1.8.3-0/python/lib/python2.7/site-packages/moviepy/video/io/ffmpeg_reader.py", line 32, in __init__
infos = ffmpeg_parse_infos(filename, print_infos, check_duration)
File "/opt/djangostack-1.8.3-0/python/lib/python2.7/site-packages/moviepy/video/io/ffmpeg_reader.py", line 237, in ffmpeg_parse_infos
proc = sp.Popen(cmd, **popen_params)
File "/opt/djangostack-1.8.3-0/python/lib/python2.7/subprocess.py", line 710, in __init__
errread, errwrite)
File "/opt/djangostack-1.8.3-0/python/lib/python2.7/subprocess.py", line 1335, in _execute_child
raise child_exception
OSError: [Errno 13] Permission denied

这段代码在我当地很好用 我的本地操作系统win7,python 2.7 但不在服务器上工作

我尝试了文件权限和目录权限

抱歉,我是韩国人,所以我的英语不好......

服务器os centOS 6,python 2.7.9,django 1.7

1 个答案:

答案 0 :(得分:0)

如果运行python脚本的用户对您正在尝试的操作没有正确的文件系统权限,则无法更改脚本中的用户权限。

此外,您的方法存在缺陷,因为您在编写文件后尝试授予自己写入权限。它必须以相反的顺序发生,以解决权限被拒绝的错误。

听起来似乎是这种情况,但有点难以从你的问题中辨别出来。

我正在通过手机接听,请原谅格式化。

使用命令行中的chmod为运行脚本的用户授予权限。

如果没有更多上下文,我猜这个用户就是您的Web服务器用来删除root权限的用户。

您的脚本在本地运行的原因是您正在运行django的runsever进行开发,它以您的用户身份运行。典型的生产配置使用像nginx或apache这样的网络服务器,它会变为安全的用户。