我想从头开始创建一个ftp客户端。 所以我想(将来)获取用户在文本字段中输入的文本并将其存储为变量。稍后,当用户单击"连接"时,程序将获取这些变量并将其用于ftp.login(user, pas)
中的凭据
这是我下面的代码:
from ftplib import FTP
import ftplib
user = 'admin'
pas = 'password'
try:
ftp = FTP('allpcexperts.com')
print 'using %s : %s'%(user,pas)
ftp.login(user,pas)
print "Success: %s:%s" %(user, pas)
except ftplib.error_perm as error:
if error:
print 'Login Failed'
这与所有其他打印字符串的方法一起给了我同样的错误:
Traceback (most recent call last):
File "ftp.py", line 10, in <module>
ftp.login(user,pas)
File "/usr/lib/python2.7/ftplib.py", line 392, in login
resp = self.sendcmd('USER ' + user)
File "/usr/lib/python2.7/ftplib.py", line 249, in sendcmd
return self.getresp()
File "/usr/lib/python2.7/ftplib.py", line 222, in getresp
raise error_temp, resp
ftplib.error_temp: 451 The parameter is incorrect.
现在,显然我没有做太多工作,我想在创建程序的 GUI 部分之前"动态"登录。
我尝试使用"学习Python的艰难方式"中教授的不同打印方法。 ftp.login(user, pas)
,ftp.login('%s'%user, '%s'%pas)
,我什至制作了单独的变量来重新创建(?)字符串。但到目前为止,唯一有效的方法是将用户名和密码静态写入ftp.login()
方法中,例如ftp.login('admin','password')
.
提前感谢!
更新我按照 Martin 的建议打开了调试,显然客户端正在发送adminn
而不仅仅是单独admin
。因此,我需要做的是在ftp.login()
方法中使用它之前剥离列表项。
调试消息:
*cmd* 'USER adminn'
*resp* '451 The parameter is incorrect.'
尝试上面的代码(或多或少),我得到:
In [1]: from ftplib import FTP
In [2]: import ftplib
In [3]:
In [3]: user = 'admin'
In [4]: pas = 'password'
In [5]: try:
...: ftp = FTP('allpcexperts.com')
...: ftp.login(user,pas)
...: except ftplib.error_perm as error:
...: print error
...:
530 User cannot log in.
该用户名和密码的530
预期。
因此,我建议您从上面发布的代码开始,并替换真正有效的用户名和密码对。