无法保存动画matplotlib:WINDOWS权限被拒绝 [英] Cannot save animation in matplotlib: Windows permission denied
问题描述
我已经努力了一整天来排序了这一点,检查类似的线程,但没有成功。
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.
我的ffmpeg的二进制是 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:WINDOWS权限被拒绝的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!