[英]unable to dowload csv file from FTP server in app engine
我正在嘗試從AppEngine中的ftp服務器讀取CSV文件,並且能夠連接到ftp服務器。 但是,當我嘗試檢索文件時,它返回了錯誤。 這是我的代碼,用於從服務器讀取CSV文件:
import ftplib
import cStringIO
import csv
session = ftplib.FTP('myftpserver.com')
session.login('username','pwd')
session.set_pasv(False)
output = cStringIO.StringIO()
session.retrbinary('RETR myfile.csv', output.write)
csvfile = csv.reader(output.getvalue().splitlines(), delimiter=',')
for i, row in enumerate(csvfile):
print row
這是我得到的錯誤的追溯:
Traceback (most recent call last):
File "/home/vikas/apps/myproj/django/core/handlers/base.py", line 111, in get_response
response = callback(request, *callback_args, **callback_kwargs)
File "/home/vikas/apps/myproj/admin/admin_actions.py", line 3528, in get_ftp_file
session.retrbinary('RETR myfile.csv', output.write)
File "/usr/lib/python2.7/ftplib.py", line 414, in retrbinary
conn = self.transfercmd(cmd, rest)
File "/usr/lib/python2.7/ftplib.py", line 376, in transfercmd
return self.ntransfercmd(cmd, rest)[0]
File "/usr/lib/python2.7/ftplib.py", line 354, in ntransfercmd
sock = self.makeport()
File "/usr/lib/python2.7/ftplib.py", line 283, in makeport
for res in socket.getaddrinfo(None, 0, self.af, socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
File "/home/vikas/gcloud/google-cloud-sdk/platform/google_appengine/google/appengine/api/remote_socket/_remote_socket.py", line 318, in getaddrinfo
raise gaierror(EAI_NONAME, 'nodename nor servname provided, or not known')
gaierror: [Errno 8] nodename nor servname provided, or not known
我不知道我做錯了什么,像dir()
nlst()
等命令都無法正常工作,並且在我添加它們后就發生了上述錯誤。
可惜的是,目前的App Engine提供的插座模擬不太好到足以覆蓋所有用例。
這是一個訪問著名的公共匿名FTP服務器並從中獲取一個小的文本文件的示例,以便每個人都可以重現和實驗...:在文件getit.py
,我們具有:
import ftplib
import cStringIO
def getit():
session = ftplib.FTP('ftp.mozilla.org')
session.login('anonymous','')
# session.set_pasv(False)
session.cwd('/pub/mozilla.org')
output = cStringIO.StringIO()
session.retrbinary('RETR README', output.write)
return output.getvalue()
if __name__ == '__main__':
print(getit())
無論您將set_pasv
留在此處,還是刪除注釋,它都可以作為獨立的python getit.py
運行良好。
要將其嵌入到GAE應用中,例如:
import getit
class GetitPage(webapp2.RequestHandler):
def get(self): # pylint:disable-msg=invalid-name
try: result = getit.getit()
except Exception as e:
result = 'Error {}: {}'.format(type(e), e)
self.response.headers['Content-Type'] = 'text/plain'
self.response.out.write(result)
使用set_pasv
左注釋,這可以正常工作,但是如果set_pasv
注釋,則基本上會收到與您相同的異常。
因此,將FTP發送到強制您進入主動模式(不支持被動模式)的服務器將無法以這種方式工作。 但是,那是一台相當破損的服務器-您能否對其進行修復以使其支持流行的默認被動模式? 這樣您的GAE應用程序就可以快樂地使用它了!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.