Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pattern.web URL加载错误--IOError:[Errno 13]权限被拒绝_Python_Linux - Fatal编程技术网

Python pattern.web URL加载错误--IOError:[Errno 13]权限被拒绝

Python pattern.web URL加载错误--IOError:[Errno 13]权限被拒绝,python,linux,Python,Linux,我在使用中遇到问题。当我试图从URL对象下载文本时,我得到了一个权限错误 Python 2.7.3 (default, Dec 18 2014, 19:10:20) [GCC 4.6.3] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import pattern.web >>> urlObject=pattern.web.URL("h

我在使用中遇到问题。当我试图从
URL
对象下载文本时,我得到了一个权限错误

Python 2.7.3 (default, Dec 18 2014, 19:10:20) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import pattern.web
>>> urlObject=pattern.web.URL("http://google.com")
>>> urlResponse = urlObject.download()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pattern/web/__init__.py", line 426, in download
    cache[id] = data
  File "/usr/local/lib/python2.7/dist-packages/pattern/web/cache/__init__.py", line 96, in __setitem__
    f = open(self._hash(k), "wb")
IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/pattern/web/cache/tmp/c7b920f57e553df2bb68272f61570210'
Python 2.7.3(默认,2014年12月18日19:10:20)
[GCC 4.6.3]关于linux2
有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
>>>导入模式.web
>>>urlObject=pattern.web.URL(“http://google.com")
>>>urlResponse=urlObject.download()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/local/lib/python2.7/dist-packages/pattern/web/_-init__.py”,第426行,下载中
缓存[id]=数据
文件“/usr/local/lib/python2.7/dist-packages/pattern/web/cache/__-init__.py”,第96行,在_-setitem中__
f=开放式(自散列表(k),“wb”)
IOError:[Errno 13]权限被拒绝:'/usr/local/lib/python2.7/dist-packages/pattern/web/cache/tmp/c7b920f57e553df2bb68272f61570210'
在使用
sudo
运行python时,我对此没有问题,但我想了解这里发生了什么,以及如何避免仅为下载URL而向python授予root权限。有人对这个问题有什么见解吗


运行Ubuntu12.04、Python2.7.3、pattern version 2.6时,您需要在具有写访问权限的目录中运行它,因为它正在尝试创建缓存文件

(可能希望在使用
sudo
运行时清理缓存文件,因为它似乎用箔条污染了系统目录。)

看起来你可以试试

urlResponse = urlObject.download(cached=False)

禁用缓存功能。

/usr/local/lib/python2.7/dist-packages/pattern/web/
的所有者/组更改为我的用户似乎解决了这个问题。我是通过pip安装pattern的,没有什么特别之处,所以我假设这是一个bug,安装pattern时权限太紧。

感谢您的回复。我认为你是对的,问题是我没有正确的权限来处理
模式
缓存。我知道我在我运行的目录中有写权限,因为
touchtest
python-c'open(“test.txt”,“w”).write(“helloworld\n”)
都可以工作。但是当我以非root用户身份运行
pattern.web.cache.clear()
时,我得到了与上面相同的错误。让我困惑的是,我没有做任何喜欢安装pattern的事情,所以我不明白/usr/local/lib中的权限怎么可能不正确。作为一个普通用户,您不能拥有对
/usr/local/lib
的写权限。我一直假设您正在用
/usr/local/lib
运行代码,并且它只是像任何正常代码一样写入当前目录。是的。这让我非常惊讶——这意味着为了在pattern.web中使用缓存,您的用户需要对
/usr/local/lib
下的pattern install dir进行写访问,这显然打破了惯例。在我更改安装目录中的权限之前,我没有尝试
cached=False
,但我打赌这会奏效。不过,这是一个非常粗糙的解决方法。任何用户都不应在
/usr/local/lib
下的任何位置具有写入权限。同意。我已经存档了。