注意:"代码"的第一部分不是代码,它来自终端的错误信息,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有点错误吗?
答案 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")