从python 3.1中的bytes对象运行shell命令(或在python 3.1中编写UTF-8 mp3标记)

从python 3.1中的bytes对象运行shell命令(或在python 3.1中编写UTF-8 mp3标记),python,unicode,mp3,python-3.x,Python,Unicode,Mp3,Python 3.x,我正在编写一个脚本,它使用.CUE文件将单片音乐文件分割成单独的曲目,然后将它们与来自提示的正确标记一起编码到MP3中。这一切都可以正常工作,但不幸的是,标签(仅通过使用lame的命令行参数来应用)在iTunes中包含unicode字符时(由于音乐是日文的,所以它们总是这样做)会可靠地显示为胡言乱语 我可以通过运行脚本来修复它们,但这是另一个要运行的脚本,偶尔会在标记上附加引号(我无法修复这个bug),需要再次运行脚本才能删除 因此,我首选的解决方案是在运行lamecommand+argumen

我正在编写一个脚本,它使用.CUE文件将单片音乐文件分割成单独的曲目,然后将它们与来自提示的正确标记一起编码到MP3中。这一切都可以正常工作,但不幸的是,标签(仅通过使用
lame
的命令行参数来应用)在iTunes中包含unicode字符时(由于音乐是日文的,所以它们总是这样做)会可靠地显示为胡言乱语

我可以通过运行脚本来修复它们,但这是另一个要运行的脚本,偶尔会在标记上附加引号(我无法修复这个bug),需要再次运行脚本才能删除

因此,我首选的解决方案是在运行
lame
command+arguments字符串之前将其编码为UTF-8,但python 3.1似乎不支持从字节而不是字符串运行命令。简单地传递一个字符串会导致编码错误

或者,我很乐意在编码完成后简单地使用标记库插入标记,尽管这样的解决方案速度较慢,也不那么优雅。不过,欢迎提出任何建议

提前谢谢

编辑:我像这样调用
lame
(很抱歉,我的行太长了):


如果您选择使用标签库,您可以查看;然后您可以按如下方式设置utf-8编码标签:

import eyeD3

tag = eyeD3.Tag ('file.mp3')
tag.setVersion (eyeD3.ID3_V2_4)
tag.setTextEncoding (eyeD3.UTF_8_ENCODING)
tag.setArtist ('artist')
tag.setAlbum ('album')
tag.setTitle ('title')
tag.update ()

如果您选择使用标签库,您可以查看;然后您可以按如下方式设置utf-8编码标签:

import eyeD3

tag = eyeD3.Tag ('file.mp3')
tag.setVersion (eyeD3.ID3_V2_4)
tag.setTextEncoding (eyeD3.UTF_8_ENCODING)
tag.setArtist ('artist')
tag.setAlbum ('album')
tag.setTitle ('title')
tag.update ()

此外,了解如何在脚本中调用lame也会很有帮助。您使用的是什么系统--Windows、Mac、Linux?如果是Windows,“默认系统代码页”是否设置为日语?我在OSX上。默认情况下,我在其中执行的终端是UTF-8。
subprocess.check_call()
可以接受参数列表:
args=[“lame”、“--tt”、item.title、“--tn”、“{0:02d}”格式(item.tracknumber),…]
谢谢,以前是这样的,但后来我遇到了一堆奇怪的“找不到文件”错误并切换到了os.system。我在上面切换了它,这样我就不会接受“你为什么要使用os.system()?”的谈话。另外,看看你如何在脚本中调用lame也会很有帮助。你在什么系统上--Windows、Mac、Linux?如果是Windows,“默认系统代码页”是否设置为日语?我在OSX上。默认情况下,我在其中执行的终端是UTF-8。
subprocess.check_call()
可以接受参数列表:
args=[“lame”、“--tt”、item.title、“--tn”、“{0:02d}”格式(item.tracknumber),…]
谢谢,以前是这样的,但后来我遇到了一堆奇怪的“找不到文件”错误并切换到了os.system。我将其切换到上面,这样我就不会再接受“为什么要使用os.system()?”的谈话。谢谢。不幸的是,该模块似乎不支持Python3.1。我会试一试,但如果我最终不得不将我的脚本向后移植到2.6,我可能最终会使用诱变剂。再次感谢汉克斯。不幸的是,该模块似乎不支持Python3.1。我会试一试,但如果我最终不得不将我的脚本向后移植到2.6,我可能最终会使用诱变剂。再次感谢