Python" IOError:[Errno 21]是一个目录:' / home / thomasshera / Pictures / Star Wars'"

时间:2016-01-04 23:30:14

标签: python tkinter urllib

注意:"代码"的第一部分不是代码,它来自终端的错误信息,SE让我以这种方式格式化。

使用Python 2.7.6的Linux机器

我有下载automator,它应该采取剪贴板内容(这是有效的)并下载它们(这不起作用)。这是错误消息:

Traceback (most recent call last):

File "/home/thomasshera/Create polynomial from random sequence.py", line 6, in <module>

urllib.urlretrieve(text_in_clipboard, "/home/thomasshera/Pictures/Star Wars")
File "/usr/lib/python2.7/urllib.py", line 94, in urlretrieve

return _urlopener.retrieve(url, filename, reporthook, data)
File "/usr/lib/python2.7/urllib.py", line 244, in retrieve
tfp = open(filename, 'wb')
IOError: [Errno 21] Is a directory: '/home/thomasshera/Pictures/Star Wars'

这是代码:

import Tkinter
import urllib
root = Tkinter.Tk()
root.withdraw() # Hide the main window (optional)
text_in_clipboard = root.clipboard_get()
urllib.urlretrieve(text_in_clipboard, "/home/thomasshera/Pictures/Star Wars")

使用Python shell可以直接修复,除了我的程序没有第94行 - shell有点错误吗?

3 个答案:

答案 0 :(得分:2)

错误不在您的代码中,而是在您使用的库中 - 所以为什么您会看到文件/usr/lib/python2.7/urllib.py的第94行。但它的原因在于你的代码。 urllib.urlretrieve将文件名(不是文件夹名称)作为其第二个参数。 (在回溯中,我们看到它被传递给函数open,它需要文件名)。这将有效:

urllib.urlretrieve(text_in_clipboard, "/home/thomasshera/Pictures/Star Wars/data.txt")

答案 1 :(得分:2)

首先,您看到的错误与脚本第94行无关,而是与urllib.py模块中的第94行无关。

其次,问题是你如何使用urlretrieve方法。它接收URL和文件名。但是您正在使用目录的路径,而不是文件。并urllib告诉你我刚刚说的话:

IOError: [Errno 21] Is a directory: '/home/thomasshera/Pictures/Star Wars'

请仔细阅读urllib docs

答案 2 :(得分:1)

urlretrieve的第二个参数应该是文件的路径,而不是目录。

  

urllib.urlretrieve(url [,filename [,reporthook [,data]]])

     

如果需要,将URL表示的网络对象复制到本地文件。

您可以修改它:

urllib.urlretrieve(text_in_clipboard, "/home/thomasshera/Pictures/Star Wars/download.temp")