0

基于这个模板,我想创建自己的 CLI 界面来管理我们的服务。基本上,这个 CLI 框架使用检查将 CLI 参数/命令与模块“命令”中的成员类匹配,并通过.run()方法实例化它

我的命令之一应该是“获取”,它基本上从 FTP 服务器下载一些数据。

所以我的命令模块中有一个 fetch.py​​ 类。

当我from ftplib import FTP现在在这个动态实例化的模块成员中执行此操作时,它会立即失败,并在 ftplib 中的 socket.py 中出现奇怪的 TypeError

看来,ftplib 以这种方式导入存在问题(其他库,如 json 工作得很好)。

  • 这种方法(getmember() 并在其上调用 run())在使用其他标准 python 代码时是否有任何限制?
  • 我在这里做错什么了吗?
4

1 回答 1

0

看来,ftplib 是唯一在动态加载的模块中导入问题的模块。

因此,在我需要它来获取一些文件之前,我立即动态加载了 ftplib 本身。importlib我赞成吗:

ftplib = importlib.import_module('ftplib')

之后,我可以以经典方式使用 ftplib:

with ftplib.FTP(config['FTP']['Host']) as ftp:
    ftp.login(user=config['FTP']['User'], passwd=config['FTP']['password'])
于 2018-02-05T08:15:07.107 回答