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