2013-04-04 2 views
1

Когда я запускаю этот код из IPython 0.13:Python ftplib проблем

import ftplib 
f=ftplib.FTP('ftp://ftp.ncbi.nih.gov/genomes/Bacteria/') 

Я получаю следующее сообщение об ошибке: gaierror: [Errno 8] имя_узел ни servname предоставленных или не известные

Полная ошибка ниже. Я запускаю python 2.7.1 на Mac OS X v10.7.5 (Lion). Я сделал несколько поисков, и похоже, что в других ситуациях была создана аналогичная ошибка. Странная часть я могу сделать

import urllib2 
tt= urllib2.urlopen('ftp://ftp.ncbi.nih.gov/genomes/Bacteria/') 

и он работает, но если я мог бы использоваться функции FTP я мог избежать синтаксический разбор urlopen, поскольку моя конечная цель выбрать подмножество каталогов и загружать их содержание.

Любая идея, как эту ошибку можно решить или обойти? Заранее спасибо

--------------------------------------------------------------------------- 
gaierror         Traceback (most recent call last) 
<ipython-input-2-91f3bda2d528> in <module>() 
----> 1 f=ftplib.FTP('ftp://ftp.ncbi.nih.gov/genomes/Bacteria/') 

/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in  __init__(self, host, user, passwd, acct, timeout) 
115   self.timeout = timeout 
116   if host: 
--> 117    self.connect(host) 
118    if user: 
119     self.login(user, passwd, acct) 

/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/ftplib.pyc in connect(self, host, port, timeout) 
130   if timeout != -999: 
131    self.timeout = timeout 
--> 132   self.sock = socket.create_connection((self.host, self.port), self.timeout) 
133   self.af = self.sock.family 
134   self.file = self.sock.makefile('rb') 

/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.pyc in create_connection(address, timeout, source_address) 
551  host, port = address 
552  err = None 
--> 553  for res in getaddrinfo(host, port, 0, SOCK_STREAM): 
554   af, socktype, proto, canonname, sa = res 
555   sock = None 

gaierror: [Errno 8] nodename nor servname provided, or not known 

ответ

8

Первый аргумент FTP() конструктор должен быть имя хоста, а не URL:

f=ftplib.FTP('ftp.ncbi.nih.gov') 
f.cwd('/genomes/Bacteria/') 

(Вы, вероятно, необходимо войти в систему или предоставить имя пользователя/пароль в FTP() вызова до звонка cwd)

+1

Спасибо! Это работает. Мне просто нужно добавить f.login() Войти как анонимный! – JAC

Смежные вопросы