Ubuntu加密主目录 | Errno 36 文件名过长
我在做一个用Python写的爬虫,遇到了一个网址,它的字符数超过了限制,导致出现了一个叫IOError的错误。我在用httplib2这个库,当我尝试获取这个网址时,出现了“文件名太长”的错误。我希望我的所有项目都放在主目录下,因为我在用Dropbox。请问有没有解决这个问题的方法,或者我应该把工作目录设置在主目录外面呢?
3 个回答
看起来你在创建 httplib.Http
对象的时候用了 '.cache'
,你应该把这个改成更合适的选项,或者直接关闭缓存功能。
你可能遇到了加密文件系统的限制,这个系统对文件名的长度最多只能支持143个字符。
这里有个相关的bug:
https://bugs.launchpad.net/ecryptfs/+bug/344878目前的解决办法是使用加密的主目录以外的其他目录。为了确认这一点,你可以:
mount | grep ecryptfs
看看你的主目录是否在列表中。如果是这样的话,你可以选择在主目录上面的其他目录,或者创建一个新的主目录,但不要使用加密。
文件名太长的问题是因为它以 '.cache/www.example.com'
开头。
httplib2
这个库可以选择性地缓存你发出的请求。你开启了缓存功能,并把缓存目录设置为 .cache
。
解决这个问题的简单办法就是把缓存目录放到别的地方。
如果不看你的代码,就没办法告诉你具体怎么修复。不过这应该很简单。关于 FileCache
的文档说明,它的第一个参数是 dir_name
,也就是你可以指定的目录名。
另外,你还可以传一个 safe
函数,这样你就可以根据 URI 生成文件名,覆盖默认的文件名。这可以帮助你生成符合 Ubuntu 加密文件系统 144 字符限制的文件名。
还有一种方法是自己创建一个和 FileCache
接口相同的对象,然后把它传给 Http
对象用作缓存。比如,你可以用 tempfile
来生成随机文件名,并在 anydbm
或 sqlite3
数据库中存储 URL 和文件名的对应关系。
最后一个选择当然就是直接关闭缓存功能。