我想从头开始创建一个ftp客户端。所以我想(将来)获取用户在文本字段中输入的文本并将其存储为变量。稍后当用户点击" Connect"时,程序将获取这些变量并将其用于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.
现在,显然我没有做太多工作,我想要动态登录&#34;动态&#34;在创建程序的GUI部分之前工作。
我尝试使用不同的打印方法,这些方法来自&#34;以艰难的方式学习Python&#34;。 ftp.login(user, pas)
,ftp.login('%s'%user, '%s'%pas)
,我甚至创建了单独的变量,重新创建(?)字符串。但到目前为止,唯一有效的方法是将用户名和密码静态写入ftp.login()
方法ftp.login('admin','password')
。
提前致谢!
更新
我按照马丁的建议开启了调试,显然客户端仅发送admin\n
而不仅仅是admin
。所以我需要做的是在ftp.login()
方法中使用它之前删除列表项。
调试消息:
*cmd* 'USER admin\n'
*resp* '451 The parameter is incorrect.'
答案 0 :(得分:0)
尝试上面的代码,(或多或少),我得到:
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
具有该用户名和密码。
因此,我建议您从上面发布的代码开始,并替换真正有效的用户名和密码对。