【问题标题】:Python FTP: "ftplib.error_temp: 421 Timeout - try typing a little faster next time" errorPython FTP:“ftplib.error_temp:421 超时 - 下次尝试输入快一点”错误
【发布时间】:2019-11-17 01:21:32
【问题描述】:

我有一个程序在用户发出命令时与 FTP 服务器交互。这是我的代码的基本结构:

from ftplib import FTP

ftp = FTP(host=host)
login_status = ftp.login(user=username, passwd=password)

while True:
    command = input()
    if command == "abc":
        ftp.storbinary(textfile, textmessage1)
    elif command == "def":
        ftp.storbinary(textfile, textmessage2)

问题是,如果我在发出命令之间等待大约 20 秒(即,如果我离开程序大约 20 秒),并在 20 秒间隙后尝试发出命令,则会弹出此错误消息:ftplib.error_temp: 421 Timeout - try typing a little faster next time

据我了解,ftp 服务器有时间限制,在不活动后会踢你。我正在寻找一种让 FTP 服务器保持忙碌并停止让它启动我的程序的方法。基本上,任何阻止该错误消息再次显示的解决方案。

提前致谢!

【问题讨论】:

  • 如果您尝试像这样设置超时:ftp = FTP(host=host, timeout=100)
  • @GiovaniSalazar 所以如果我为超时参数设置一个非常大的数字,FTP 服务器会有更大的超时余量吗?另外,timeout 变量的单位是秒还是毫秒?
  • 当然不是,timeout参数仅供本地使用。如果对服务器没有影响。

标签: python ftp ftplib


【解决方案1】:

您必须:

  • 只有在提示用户后才能登录。
  • 或通过执行一些虚拟命令来提示用户时保持连接处于活动状态。通常通过发送NOOP 命令来完成:

    ftp.voidcmd("NOOP")
    

    虽然有些服务器会忽略NOOP 命令。然后你将不得不发送一些真正做某事的命令,比如PWD

    通过阻塞input 调用,您将不得不在另一个线程上发送命令,请参阅
    Do something while user input not received

【讨论】:

  • 感谢您的评论。一个问题,PWD 命令实际上是做什么的?真的,因为我只与服务器中的文本文件交互,所以任何不影响文件的命令都可以。
  • PWD 命令返回当前远程工作目录。所以它对文件或其他任何东西没有副作用。在ftplib中,可以调用FTP.pwd方法发送。
猜你喜欢
  • 2016-01-21
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 2017-09-09
  • 2022-11-27
相关资源
最近更新 更多