MacOS下Python调用MuseScore3导出乐谱PNG触发Errno13权限错误
music21导出乐谱PNG两类问题解决方案
问题汇总
调试乐谱PNG导出功能过程中遇到两个核心问题:
- 初始使用
show("lily")方法导出时,只要小节仅包含休止符、无实际音符,就无法生成PNG文件 - 切换
show("musicxml.png")方案后,在MacOS环境下即使给/Applications/MuseScore 3.app执行chmod 777、sudo chown root:wheel配置全权限,运行时依然抛出权限拒绝错误
复现代码
from music21 import * us = environment.UserSettings() us['musicxmlPath'] = '/Applications/MuseScore 3.app' us['musescoreDirectPNGPath'] = '/Applications/MuseScore 3.app' s = stream.Stream() s.append(note.Rest()) s.show("musicxml.png")
报错回溯
traceback (most recent call last): File "/Users/brien/Documents/FinalProject/personal_learning/check_music21.py", line 10, in <module> s.show("musicxml.png") File "/Users/brien/Documents/FinalProject/.venv/lib/python3.9/site-packages/music21/stream/base.py", line 334, in show return super().show(fmt=fmt, app=app, **keywords) File "/Users/brien/Documents/FinalProject/.venv/lib/python3.9/site-packages/music21/base.py", line 2788, in show return formatWriter.show(self, File "/Users/brien/Documents/FinalProject/.venv/lib/python3.9/site-packages/music21/converter/subConverters.py", line 1108, in show returnedFilePath = self.write(obj, fmt, subformats=subformats, **keywords) File "/Users/brien/Documents/FinalProject/.venv/lib/python3.9/site-packages/music21/converter/subConverters.py", line 1091, in write outFp = self.runThroughMusescore(xmlFp, subformats, **keywords) File "/Users/brien/Documents/FinalProject/.venv/lib/python3.9/site-packages/music21/converter/subConverters.py", line 964, in runThroughMusescore completed_process = subprocess.run(musescoreRun, capture_output=True, check=False) File "/Users/brien/micromamba/lib/python3.9/subprocess.py", line 505, in run with Popen(*popenargs, **kwargs) as process: File "/Users/brien/micromamba/lib/python3.9/subprocess.py", line 951, in __init__ self._execute_child(args, executable, preexec_fn=close_fds, File "/Users/brien/micromamba/lib/python3.9/subprocess.py", line 1821, in _execute_child raise child_exception_type(errno_num, err_msg, err_filename) PermissionError: [Errno 13] Permission denied: '/Applications/MuseScore 3.app'
已验证的目录权限
执行ls -l /Applications返回MuseScore目录权限如下:
drwxrwxrwx@ 3 root wheel 96 8 Feb 2021 MuseScore 3.app
目录已配置全部读写执行权限,报错依然存在。
问题根因
- 权限报错属于路径配置错误,和目录权限无关:MacOS下
.app是应用打包的目录结构,不是可执行文件本体,直接将目录路径传给子进程启动时,系统会尝试执行一个目录,直接抛出权限拒绝,之前修改目录所有者、开777权限都是无效操作。 - lilypond后端纯休止符导出失败:该后端默认将仅含休止符、无有效音符的乐谱流判定为空内容,不会触发后续PNG渲染流程。
修复步骤
解决MuseScore权限报错
- 定位MuseScore 3的实际可执行文件路径,默认安装路径为
/Applications/MuseScore 3.app/Contents/MacOS/mscore - 修改music21环境配置,将原来的
.app目录路径替换为上述可执行文件路径:
from music21 import * us = environment.UserSettings() # 配置为实际可执行文件路径,不要填写.app目录 us['musicxmlPath'] = '/Applications/MuseScore 3.app/Contents/MacOS/mscore' us['musescoreDirectPNGPath'] = '/Applications/MuseScore 3.app/Contents/MacOS/mscore' s = stream.Stream() s.append(note.Rest()) s.show("musicxml.png")
- 首次运行如果弹出MacOS安全拦截提示,直接打开「系统设置-隐私与安全性」,下拉到安全区域,点击对应mscore程序的「仍要打开」按钮授权即可,不需要额外修改应用目录权限。
解决纯休止符小节导出问题
修复路径后的MuseScore后端原生支持纯休止符小节导出,不需要额外做兼容处理,直接运行即可正常生成PNG。如果坚持使用lilypond后端,需要给纯休止符流添加一个隐藏的零音量音符或者乐谱元信息,骗过后端的空内容校验即可。
内容的提问来源于stack exchange,提问作者1990brien
相关产品推荐
相关产品推荐

