ftp - 无法在 Apache Airflow 中使用 FTPHook 连接到 FTP 服务器
问题描述
我正在尝试在 Apache Airflow 中使用 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.
但是,如果我们将这行代码hook.get_conn().login()
放在print
函数之前,一切正常。这是一个错误还是我做错了什么?
解决方案
感谢 Slack 中的 Apache Airflow 社区,我们可以通过在 Airflow GUI 平台中设置正确的用户名和密码来解决问题。尽管我试图以匿名用户身份连接,但有必要设置username = 'anonymous'和password = 'anonymous@'。这似乎是ftplib的默认设置,如docs的第一个示例中所示,但如果您将它们留空,Airflow 会将这些值更改为None 。
推荐阅读
- python - __init__() 得到了一个意外的关键字参数“端点”
- android - 如何在底部导航视图中添加分隔线
- java - 从java代码在android设备中安装apk
- java - 如何在java中使用反射直接在bean类的私有Setter方法中设置值
- javascript - React useState 未定义与 webpack-dev-server 一起使用
- kotlin - Dagger 2 @Provides 不能应用于 Kotlin 中的静态函数?
- java - 在 JavaFx 中实现倒数计时器时遇到问题
- django - 如何覆盖下拉列表中的默认值
- java - 将 Substring 值与 Substring 的 ArrayList String 进行比较
- android - 我试图获取 EditText 值