retrbinary 期间线程化“NOOP”命令

2024-04-13

我编写了一个 FTP 脚本,遗憾的是该脚本必须处理位于防火墙后面的服务器。 ISP 也会很早就切断我的控制连接,无论我在防火墙的任一侧设置什么样的超时设置。我最终做出了两个选择。 1) 在 retrbinary 命令中分叉代码,以便下载完成时每 n 秒发送一次“NOOP”,或者 2) 在 retrbinary 命令中分叉代码,以便脚本将本地文件的大小与远程文件的大小进行比较。一旦大小不同,它就会尝试下载下一个文件。

我在下面添加了一些代码,举例说明了我尝试每 n 秒发送一次“NOOP”。问题是,当脚本进入 isAlive while 循环并发送执行 ftp.sendcmd('NOOP') 时,事情会挂起并且 while 循环锁定。该文件仍在 TCP 端口 63xxx 上下载,但端口 21 上的控制连接已锁定。

至于在下载过程中使用线程检查文件大小,该操作失败了,因为文件大小没有完全达到完整值,并且在下载结束时只是处于相同的值。

现在的主要问题是在大量下载过程中尽一切可能保持我的控制连接处于活动状态。如果控制连接由于某种原因被终止,我的脚本需要有一个好的方法来知道文件传输何时完成。如果没有控制连接,它就无法从服务器响应中获知。

提前致谢。

def FTP_RETR(ftp_transfer_path, f, start_byte):
     ftp.retrbinary('RETR %s' % ftp_transfer_path, f.write, rest = '%s' % start_byte)
     f.close()

ftp = FTP()
ftp.connect(FTP_server, FTP_port)
ftp.login(FTP_username, FTP_password)
ftp.cwd(home_dir)

ftp_transfer_path = 'file_to_get.dat'
start_byte = 0

filename = 'C:\\myfile.txt'
f = open('C:\\myfile.txt', 'wb')

ftp.sendcmd('TYPE I')


transfer_thread = threading.Thread(target = FTP_RETR, args = (ftp_transfer_path, f, start_byte))
transfer_thread.start()

while transfer_thread.isAlive():
    time.sleep(5)
    ftp.sendcmd('NOOP')

print 'Finished'

None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

retrbinary 期间线程化“NOOP”命令 的相关文章

随机推荐

  • 在 ASP.NET Core MVC 中选择 ENUM 标记帮助器

    我需要一些使用标签帮助器的枚举下拉列表的帮助 我发现了很多将模型绑定到 Selectlist 的示例 有些使用 ENUM 但所有这些示例都与 CREATE 操作有关 而我面临着 EDIT 操作的问题 MY MODEL public clas
  • 在 Firefox 中更好地查看 XML

    当您在 Firefox 中查看简单的 XML 文档时 它会进入标准 XML 显示模式 您可以在其中折叠子树等 但它的功能非常有限 没有什么比 全部展开 和 全部折叠 按钮更方便的了 页面顶部有一条烦人的 此 XML 文件似乎没有任何与之关联
  • 如何使 cassandra 中的值独一无二

    我想在 cassandra 中进行唯一约束 因为我希望我的专栏中的所有值在我的专栏系列中都是唯一的 前任 名字 拉胡尔 电话123 地址 abc 现在我希望我这一行没有等于 rahul 123 和 abc 的值在 datastax 上搜索时
  • 如何使用地理编码器计算两点之间的距离(以公里为单位)

    我正在尝试找出一种使用地理编码器显示地图上两点之间的计算距离的方法 我的表中有 start address 和 destination address 在我看来是我要求的 我的模型如下所示 class Ride lt ActiveRecor
  • 为什么 java.util.Properties 实现 Map 而不是 Map

    The java util Properties类旨在表示一个映射 其中键和值都是字符串 这是因为Properties对象用于读取 properties文件 它们是文本文件 那么 为什么在Java 5中他们要改造这个类来实现Map
  • Istio 目标规则子集不起作用

    我的 istio 目标规则不起作用 在 kiali 中出现以下错误 VirtualService and destination rule for echo service 我的召唤echo svc 8080 and echo svc 80
  • 如何使用 querySelector on 按名称选择输入元素?

    我最近在该网站上收到了有关使用的帮助querySelector在表单输入上 例如select但当我采取
  • 在 Android Studio 中注释/取消注释所选文本的键盘快捷键

    如何使用控制组合键注释掉 IDE 中选定的几行文本 I thought that Ctrl Alt C was the correct sequence but that s not working To comment uncomment
  • 如何从 javax.lang.model.VariableElement 获取参数类型

    我正在尝试使用 Java 6 元模型 API 查找方法的参数类型 如果类型是枚举 我还想知道它的所有类型的枚举常量名称 这是我到目前为止所得到的 for Element member members if member getKind El
  • 将 NSArray 写回 plist

    我有一个具有以下格式的 plist 我是这样读的 NSString errorDesc nil NSPropertyListFormat format NSString path NSBundle mainBundle pathForRes
  • 确定组件的所有者何时加载

    我创建了一个包含自定义组件的 WinForms 应用程序 该组件需要在启动时触发其事件之一 但是在调用组件的构造函数时 所有事件处理程序仍然为空 我需要的是一个事件 告诉我拥有该组件的窗口已加载并且所有事件处理程序已设置 然而 组件似乎没有
  • 从 GitHub 拉取请求获取评论列表

    根据http developer github com v3 pulls comments list comments on a pull request http developer github com v3 pulls comment
  • 泛型错误:预期类型参数,找到结构

    我开始了一个新项目 我希望尽可能模块化 我的意思是我希望将来能够用其他部件替换某些部件 这似乎是一个完美的用途traits 目前我有这个代码 mod parser mod renderer mod renderers use parser
  • 我的 Django URL 没有显示破折号

    我正在尝试找出一个与domain com about us 和domain com home 匹配的网址 我有一个网址正则表达式 P
  • JavaScript 无法在脚本标签中工作? [复制]

    这个问题在这里已经有答案了 我需要知道为什么要这样做 因为我在网站的脚本标签中使用了 javascript 但它不起作用 为什么我的javascript在脚本标签中不起作用 切换不会切换 http jsfiddle net J7L4k 2
  • 如何获取 asp.net c# 的发布数据[重复]

    这个问题在这里已经有答案了
  • WiX 在构建服务器上失败

    我有一个使用 WiX 的项目 它在我的本地计算机上运行良好 但是当我发布到构建服务器时 构建会因以下内容而崩溃 来自 MSBuild 日志 Using HeatDirectory task from assembly C Program F
  • 为什么标准没有提供擦除删除惯用语的便利帮助程序?

    从 STL 中的集合中删除项目需要一种经常使用的技术 该技术已成为一种习惯用法 擦除 删除 惯用语 https en wikipedia org wiki Erase E2 80 93remove idiom 这个习语最常见的用法之一是删除
  • 如何找出当前页面上的光标位置?

    我向页面添加了一堆内容 例如document add p 然后我使用文档添加一个填充两列的表格here http itextpdf com examples iia php id 91 在这个过程中 我使用 column setSimple
  • retrbinary 期间线程化“NOOP”命令

    我编写了一个 FTP 脚本 遗憾的是该脚本必须处理位于防火墙后面的服务器 ISP 也会很早就切断我的控制连接 无论我在防火墙的任一侧设置什么样的超时设置 我最终做出了两个选择 1 在 retrbinary 命令中分叉代码 以便下载完成时每