在动态实例化的成员类

时间:2018-02-01 16:52:21

标签: python python-3.x inspection

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

我的一个命令应该是'fetch',它基本上从FTP服务器下载一些数据。

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

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

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

  • 这种方法(getmember()和对它的调用run())是否有使用其他标准python代码的任何限制?
  • 我在这里做错了吗?

1 个答案:

答案 0 :(得分: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'])