看到源代碼:http://hg.python.org/cpython/file/2.7/Lib/ftplib.py
418 def retrlines(self, cmd, callback = None):
419 """Retrieve data in line mode. A new port is created for you.
420
421 Args:
422 cmd: A RETR, LIST, NLST, or MLSD command.
423 callback: An optional single parameter callable that is called
424 for each line with the trailing CRLF stripped.
425 [default: print_line()]
426
427 Returns:
428 The response code.
429 """
430 if callback is None: callback = print_line
431 resp = self.sendcmd('TYPE A')
432 conn = self.transfercmd(cmd)
433 fp = conn.makefile('rb')
434 while 1:
435 line = fp.readline()
436 if self.debugging > 2: print '*retr*', repr(line)
437 if not line:
438 break
439 if line[-2:] == CRLF:
440 line = line[:-2]
441 elif line[-1:] == '\n':
442 line = line[:-1]
443 callback(line)
444 fp.close()
445 conn.close()
446 return self.voidresp()
至於其他的答案解釋,該功能retrlines()
本身就是打印到stdout
通話。的相關行是430,其中通過缺省可變callback
被定義爲函數print_line()
其中,這並不奇怪,簡單地輸出一個給定的字符串:
859 def print_line(line):
860 '''Default retrlines callback to print a line.'''
861 print line
的callback()
函數被調用上線443的retrlines()
,導致線被打印。
要抑制打印輸出,您可以使用retrlines()
以及自定義callback
函數,該函數不會執行任何操作,例如,
ftp.retrlines('LIST', callback=lambda x: pass)