我遇到非ASCII字符问题。
我正在使用python 2.7.3
python -V
Python 2.7.3
我安装了http://pymediainfo.readthedocs.org/en/latest/
经由
easy_install pymediainfo
导入如下
from pymediainfo import MediaInfo
media_info = MediaInfo.parse(os.path.join(path, to, file))
使用ascii字符很好
用于调试我打印了来自:
的'命令'/usr/local/lib/python2.7/dist-packages/pymediainfo-1.3.5-py2.7.egg/pymediainfo/__init__.py
在/usr/local/lib/python2.7/dist-packages/pymediainfo-1.3.5-py2.7.egg/pymediainfo/ init 中“运行”mediainfo命令的类的.py
ENV_DICT = {
"PATH": "/usr/local/bin/:/usr/bin/",
"LD_LIBRARY_PATH": "/usr/local/lib/:/usr/lib/"}
@staticmethod
def parse(filename, environment=ENV_DICT):
command = ["mediainfo", "-f", "--Output=XML", filename]
print command
print repr(command)
fileno_out, fname_out = mkstemp(suffix=".xml", prefix="media-")
fileno_err, fname_err = mkstemp(suffix=".err", prefix="media-")
fp_out = os.fdopen(fileno_out, 'r+b')
fp_err = os.fdopen(fileno_err, 'r+b')
p = Popen(command, stdout=fp_out, stderr=fp_err, env=environment)
p.wait()
fp_out.seek(0)
xml_dom = MediaInfo.parse_xml_data_into_dom(fp_out.read())
fp_out.close()
fp_err.close()
return MediaInfo(xml_dom)
打印和打印repr()显示:
['mediainfo', '-f', '--Output=XML', "/mnt/path/Long 73\xc2\xb0 58' W.avi"]
文件名为:
Long 73° 58' W.avi
查看UTF-8表\ xc2 \ xb0对应于°
我知道这可能只是控制台没有解释编码,但是mediainfo的输出只是
<?xml version="1.0" encoding="UTF-8"?>
<Mediainfo version="0.7.58">
</Mediainfo>
表示“找不到文件”
os.path.isfile(os.path.join(path, to, file))
为这些文件返回true
并使用
进行bashmediainfo -f --Output=XML "/path/to/file"
作品
我已经四处寻找并且无法找到答案。
有什么想法吗?
由于
更新
我使用了这个新的测试脚本
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import os
import subprocess as sub
root = "/mnt/path"
for rootfldr in sorted(os.listdir(root)):
if os.path.isfile(os.path.join(root, rootfldr)):
command = ['mediainfo', '-f', '--Output=XML', rootfldr]
aa = sub.Popen(command, stdout=sub.PIPE, stderr=sub.PIPE, stdin=sub.PIPE)
result = aa.communicate()[0]
print rootfldr
print result
结果很好(其中一些非ASCII字符)。
然后我决定改变(从pymedinfo解析函数):
p = Popen(command, stdout=fp_out, stderr=fp_err, env=environment)
到
p = Popen(command, stdout=fp_out, stderr=fp_err)
问题解决了
我猜测
中缺少某些东西或错误ENV_DICT = {
"PATH": "/usr/local/bin/:/usr/bin/",
"LD_LIBRARY_PATH": "/usr/local/lib/:/usr/lib/"}
答案 0 :(得分:0)
该命令看起来不错。文件名作为包含使用utf-8编码的文本的字节串传递。如果您的文件系统使用utf-8,那么它是正确的文件名:
>>> print "/mnt/path/Long 73\xc2\xb0 58' W.avi".decode('utf-8')
/mnt/path/Long 73° 58' W.avi
这可能是pymediainfo
中的错误。尝试明确地传递environment
参数作为解决方法,例如environment=os.environ
。