无法保存动画matplotlib:W​​INDOWS权限被拒绝 [英] Cannot save animation in matplotlib: Windows permission denied

查看:625
本文介绍了无法保存动画matplotlib:W​​INDOWS权限被拒绝的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经努力了一整天来排序了这一点,检查类似的线程,但没有成功。
Stretch的动画无法保存matplotlib与ffmpeg的动画与previous错误(我有ffmpeg的路径是错误的)帮助,但我一直得到固定的访问后否认。

I've been trying for a day long to sort this out, checking similar threads but with no success. Stretch's Cannot save matplotlib animation with ffmpeg helped with previous errors (I had ffmpeg path wrong), but I kept getting Access denied after fixing it.

我的f​​fmpeg的二进制是 C:\\ ffmpeg的\\ BIN

My ffmpeg binary is on C:\ffmpeg\bin

一个不错的选择将是能够出口的gif文件,但我不断收到与ImageMagick的一个ascii错误。我认为,这两个问题是相关的,所以我想先整理一下FFmpeg的。

A nice alternative would be to able to export gif files, but I keep getting an ascii error with imagemagick. I think both problems are related, so I wanted to sort out the ffmpeg first.

我认为这个问题可能与我有雨棚的工作(在Windows 8 64位),但事实上这pretty多hegemonized我的路径变量,打破了一些东西,一路上(做如我做不到因为我安装雨棚开放空闲,没有试图解决这个问题还没有)。正如我固定的东西,一路上我发现至少有3种不同的路径变量,我全部更新:Windows高级设置路径(手动设置),Windows控制台路径(通过与SETX控制台设置),并sys.path中(设置或检查在运行时),加入; C:\\ ffmpeg的\\ BIN,其中的ffmpeg是有效。无论我梳理出的问题或没有,我想了解这些环境变量是相关的东西,我觉得很困惑。

I think the problem might have to do with the fact I'm working with Canopy (in Windows 8 64bit), which pretty much hegemonized my path variable and broke some things along the way (e.g. I can't open IDLE since I installed Canopy, didn't tried to fix that yet). As I fixed things along the way I found at least 3 distinct path variables, all of which I updated: windows advanced settings path (set manually), windows console path (set via console with setx), and sys.path (set or checked at runtime), adding ";C:\ffmpeg\bin", where ffmpeg effectively is. Regardless I sort out the problem or not, I would like to learn which of these environment variables are relevant for what, I find it very confusing.

在code是以下内容:

The code is the following:

# -*- coding: utf-8 -*-
import sys
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
plt.rcParams['animation.ffmpeg_path'] = r'C:\ffmpeg\bin'
if r'C:\ffmpeg\bin' not in sys.path: sys.path.append(r'C:\ffmpeg\bin')

fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(-2, 2))
line, = ax.plot([], [], lw=2)

def init():
    line.set_data([], [])
    return line,

def animate(i):
    x = np.linspace(0, 2, 1000)
    y = np.sin(2 * np.pi * (x - 0.01 * i))
    line.set_data(x, y)
    return line,

anim = animation.FuncAnimation(fig, animate, init_func=init, frames=200, interval=20, blit=True)
plt.show()

# This case generates Windows err: Access Denied
FFwriter = animation.FFMpegWriter()
# anim.save(r'C:\basic_animation.mp4', writer = FFwriter, fps=30)

# This case generates UnicodeDecodeError:'ascii' codec can't decode byte 0xa0 in position 3
# anim.save(r'C:\animation.gif', writer='imagemagick', fps=30)

回溯anim.save(R'C:\\ basic_animation.mp4',作家= FFwriter,FPS = 30)

%run "C:\Users\Yahveh\Documents\Vlad\Investigacion\animation saving.py"
---------------------------------------------------------------------------
WindowsError                              Traceback (most recent call last)
C:\Users\Yahveh\Documents\Vlad\Investigacion\animation saving.py in <module>()
     27 # This case generates Windows err: Access Denied
     28 FFwriter = animation.FFMpegWriter()
---> 29 anim.save(r'C:\basic_animation.mp4', writer = FFwriter, fps=30)
     30 
     31 # This case generates UnicodeDecodeError:'ascii' codec can't decode byte 0xa0 in position 3

C:\Users\Yahveh\AppData\Local\Enthought\Canopy\User\lib\site-packages\matplotlib\animation.pyc in save(self, filename, writer, fps, dpi, codec, bitrate, extra_args, metadata, extra_anim, savefig_kwargs)
    759         # since GUI widgets are gone. Either need to remove extra code to
    760         # allow for this non-existant use case or find a way to make it work.
--> 761         with writer.saving(self._fig, filename, dpi):
    762             for data in zip(*[a.new_saved_frame_seq()
    763                               for a in all_anim]):

C:\Users\Yahveh\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.5.2.2785.win-x86_64\lib\contextlib.pyc in __enter__(self)
     15     def __enter__(self):
     16         try:
---> 17             return self.gen.next()
     18         except StopIteration:
     19             raise RuntimeError("generator didn't yield")

C:\Users\Yahveh\AppData\Local\Enthought\Canopy\User\lib\site-packages\matplotlib\animation.pyc in saving(self, *args)
    184         '''
    185         # This particular sequence is what contextlib.contextmanager wants
--> 186         self.setup(*args)
    187         yield
    188         self.finish()

C:\Users\Yahveh\AppData\Local\Enthought\Canopy\User\lib\site-packages\matplotlib\animation.pyc in setup(self, fig, outfile, dpi, *args)
    174         # Run here so that grab_frame() can write the data to a pipe. This
    175         # eliminates the need for temp files.
--> 176         self._run()
    177 
    178     @contextlib.contextmanager

C:\Users\Yahveh\AppData\Local\Enthought\Canopy\User\lib\site-packages\matplotlib\animation.pyc in _run(self)
    202                                       stdout=output, stderr=output,
    203                                       stdin=subprocess.PIPE,
--> 204                                       creationflags=subprocess_creation_flags)
    205 
    206     def finish(self):

C:\Users\Yahveh\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.5.2.2785.win-x86_64\lib\subprocess.pyc in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags)
    707                                 p2cread, p2cwrite,
    708                                 c2pread, c2pwrite,
--> 709                                 errread, errwrite)
    710         except Exception:
    711             # Preserve original exception in case os.close raises.

C:\Users\Yahveh\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.5.2.2785.win-x86_64\lib\subprocess.pyc in _execute_child(self, args, executable, preexec_fn, close_fds, cwd, env, universal_newlines, startupinfo, creationflags, shell, to_close, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite)
    955                                          env,
    956                                          cwd,
--> 957                                          startupinfo)
    958             except pywintypes.error, e:
    959                 # Translate pywintypes.error to WindowsError, which is

WindowsError: [Error 5] Acceso denegado 

anim.save回溯(R'C:\\ animation.gif',作家='ImageMagick的',FPS = 30)

In [8]: %run "C:\Users\Yahveh\Documents\Vlad\Investigacion\animation saving.py"
---------------------------------------------------------------------------
UnicodeDecodeError                        Traceback (most recent call last)
C:\Users\Yahveh\Documents\Vlad\Investigacion\animation saving.py in <module>()
     30 
     31 # This case generates UnicodeDecodeError:'ascii' codec can't decode byte 0xa0 in position 3
---> 32 anim.save(r'C:\animation.gif', writer='imagemagick', fps=30)

C:\Users\Yahveh\AppData\Local\Enthought\Canopy\User\lib\site-packages\matplotlib\animation.pyc in save(self, filename, writer, fps, dpi, codec, bitrate, extra_args, metadata, extra_anim, savefig_kwargs)
    765                     # TODO: Need to see if turning off blit is really necessary
    766                     anim._draw_next_frame(d, blit=False)
--> 767                 writer.grab_frame(**savefig_kwargs)
    768 
    769         # Reconnect signal for first draw if necessary

C:\Users\Yahveh\AppData\Local\Enthought\Canopy\User\lib\site-packages\matplotlib\animation.pyc in grab_frame(self, **savefig_kwargs)
    225             verbose.report('MovieWriter -- Error '
    226                            'running proc:\n%s\n%s' % (out,
--> 227                                                       err), level='helpful')
    228             raise
    229 

UnicodeDecodeError: 'ascii' codec can't decode byte 0xa0 in position 3: ordinal not in range(128) 

在他们盯着一段时间。

Stared at them for a while.

感谢您的时间!

更新:我在后面的这个帖子授予同时访问C:\\ ffmpeg的和目标文件夹,但没有运气:(

UPDATE: I followed the steps in this post for granting access to both C:\ffmpeg and destination folder, but no luck :(

推荐答案

也许不是一个惊喜。我的路径的ffmpeg, C:\\ ffmpeg的\\ BIN ,是错误的;因为它应该是路径一直到exe文件,而不仅仅是父文件夹,当我从拉伸的帖子误解,并作为丹尼尔指出。
注意了我之前已经尝试过这一点,但只是在时间的变化的错误消息。
平静,休息一下,并仔细阅读,不只是找一块code那会适合你。这只是一个错误。
这就是答案。

Perhaps not a surprise. My path to ffmpeg, C:\ffmpeg\bin, was wrong; since it should be the path right down to the exe file, not just the parent folder, as I misunderstood from Stretch's post, and as Daniel pointed out. Notice out I have already tried this before, but just changed the error message at the time. Calm, get some rest and read carefully, not just looking for the piece of code that will suit you. It's just a bug. That's the answer.

这篇关于无法保存动画matplotlib:W​​INDOWS权限被拒绝的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆