Can';t在Apache中使用FTPHook连接到FTP服务器

Can';t在Apache中使用FTPHook连接到FTP服务器,ftp,airflow,airflow-operator,Ftp,Airflow,Airflow Operator,我正在尝试在Apache中使用FTPHook类。以下是以ftp.gnu.org为例的测试代码: from airflow.contrib.hooks.ftp_hook import FTPHook hook = FTPHook('gnu') print(hook.list_directory('')) 此代码返回错误: {base_hook.py:84} INFO - Using connection to: id: gnu. Host: ftp.gnu.org, Port: None, Sc

我正在尝试在Apache中使用FTPHook类。以下是以
ftp.gnu.org
为例的测试代码:

from airflow.contrib.hooks.ftp_hook import FTPHook
hook = FTPHook('gnu')
print(hook.list_directory(''))
此代码返回错误:

{base_hook.py:84} INFO - Using connection to: id: gnu. Host: ftp.gnu.org, Port: None, Schema: None, Login: None, Password: None, extra: {}
Traceback (most recent call last):
  File "test.py", line 5, in <module>
    print(hook.list_directory(''))
  File "/home/ubuntu/.anaconda3/envs/airflow/lib/python3.7/site-packages/airflow/contrib/hooks/ftp_hook.py", line 127, in list_directory
    conn.cwd(path)
  File "/home/ubuntu/.anaconda3/envs/airflow/lib/python3.7/ftplib.py", line 631, in cwd
    return self.voidcmd(cmd)
  File "/home/ubuntu/.anaconda3/envs/airflow/lib/python3.7/ftplib.py", line 278, in voidcmd
    return self.voidresp()
  File "/home/ubuntu/.anaconda3/envs/airflow/lib/python3.7/ftplib.py", line 251, in voidresp
    resp = self.getresp()
  File "/home/ubuntu/.anaconda3/envs/airflow/lib/python3.7/ftplib.py", line 246, in getresp
    raise error_perm(resp)
ftplib.error_perm: 530 Please login with USER and PASS.
{base\u hook.py:84}INFO-使用到:id:gnu的连接。主机:ftp.gnu.org,端口:无,架构:无,登录:无,密码:无,额外:{}
回溯(最近一次呼叫最后一次):
文件“test.py”,第5行,在
打印(hook.list_目录(“”))
文件“/home/ubuntu/.anaconda3/envs/afflow/lib/python3.7/site packages/afflow/contrib/hooks/ftp\u hook.py”,第127行,在列表目录中
连接cwd(路径)
cwd中的文件“/home/ubuntu/.anaconda3/envs/afflow/lib/python3.7/ftplib.py”,第631行
返回self.voidcmd(cmd)
文件“/home/ubuntu/.anaconda3/envs/afflow/lib/python3.7/ftplib.py”,第278行,在voidcmd中
返回self.voidresp()
文件“/home/ubuntu/.anaconda3/envs/afflow/lib/python3.7/ftplib.py”,第251行,在voidresp中
resp=self.getresp()
文件“/home/ubuntu/.anaconda3/envs/afflow/lib/python3.7/ftplib.py”,第246行,在getresp中
升起错误\u perm(resp)
ftplib.error_perm:530请使用用户登录并通过。

但是,如果我们将这行代码
hook.get_conn().login()
放在
print
函数之前,一切都会正常工作。这是一个bug还是我做错了什么?

多亏了Slack中的Apache Airflow社区,我们可以通过在Airflow GUI平台中设置正确的用户名和密码来解决问题。虽然我试图以匿名用户身份连接,但必须将用户名设置为“匿名”,密码设置为“匿名”。这似乎是ftplib的默认设置,就像在的第一个示例中一样,但如果将这些值留空,气流会将这些值更改为无