私はftplibを使用するftpプログラムを持っており、過去2日間、retrbinaryとstorbinaryのプログレスバーを実装する方法を見つけようとしていました。プログレスバー2.3モジュールを使用しようとしていますが、それを結び付けることができませんでした。これは、コールバック関数がどのように機能するかについての誤解が原因である可能性があります。とにかくここに私が持っているものがあります。
import progressbar
import ftplib
ftp = ftplib.FTP()
ftp.connect("host", "port")
ftp.login("user", "pwd")
widgets = ['Downloading: ', Percentage(), ' ', Bar(marker=RotatingMarker()),
' ', ETA(), ' ', FileTransferSpeed()]
pbar = ProgressBar(widgets=widgets, maxval=1024).start()
def callback(p):
for i in range(1024):
pbar.update(10*i+1)
pbar.finish()
ftp.storbinary("STOR iTunesSetup.exe", open("iTunesSetup.exe"), callback, blocksize=1024)
これは私がこれを試した多くの方法の1つにすぎませんが、このエラーが発生します。
Traceback (most recent call last):
File "progrbar.py", line 7, in <module>
ftp.connect("host", "port")
File "/usr/lib/python2.7/ftplib.py", line 132, in connect
self.sock = socket.create_connection((self.host, self.port), self.timeout)
File "/usr/lib/python2.7/socket.py", line 553, in create_connection
for res in getaddrinfo(host, port, 0, SOCK_STREAM):
socket.gaierror: [Errno -8] Servname not supported for ai_socktype
このコールバックがなくても、ftpサーバーは問題なく動作し、ダウンロードするのに十分なスペースがあると言えます。誰かが私にいくつかのポインタを与えることができれば、私はそれをいただければ幸いです。