看到源代码: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)