我用于连接和显示 ftp 服务器内容的代码不会超出 /[dir]/
My code to connect and display the contents of a ftp server does not cwd beyond /[dir]/
我似乎无法更改 archive.ubuntu.com 上 /ubuntu/ 之后的目录,我怀疑我的代码更改到了错误的目录。我的错误在哪里?
from ftplib import FTP
from tkinter import *
ftp = FTP("archive.ubuntu.com")
ftp.login()
window = Tk()
window.geometry("640x480")
def listdir():
print(ftp.dir())
[child.destroy() for child in window.winfo_children()]
for x in ftp.nlst():
Button(window, text=x, command=(lambda: cdir(x))).pack()
def cdir(x):
f = ftp.pwd()+"/"+x
ftp.cwd(f)
listdir()
listdir()
window.mainloop()
这是在我的大型应用程序中重现我的问题的简单代码。
系统:windows
python运行时间:python3.8
如何防止这个错误?我可以使用 python 命令行更改目录。 ftplib 没有抛出任何错误,我已经尝试在 ftp.
上打印我 运行 的每个命令
您需要在 lambda
函数中进行早期绑定。变化自
lambda: cdir(x)
至:
lambda y=x: cdir(y)
否则你会在调用函数时得到 x
的值,而不是创建函数时的值。
(显然你仍然需要告诉你的代码文件和目录之间的区别,因为有了上面的修复,你就可以导航到代表实际文件的按钮,然后点击那些按钮当它尝试将目录更改为它们时会出错。但以上内容将解决您现在遇到的问题。)
我似乎无法更改 archive.ubuntu.com 上 /ubuntu/ 之后的目录,我怀疑我的代码更改到了错误的目录。我的错误在哪里?
from ftplib import FTP
from tkinter import *
ftp = FTP("archive.ubuntu.com")
ftp.login()
window = Tk()
window.geometry("640x480")
def listdir():
print(ftp.dir())
[child.destroy() for child in window.winfo_children()]
for x in ftp.nlst():
Button(window, text=x, command=(lambda: cdir(x))).pack()
def cdir(x):
f = ftp.pwd()+"/"+x
ftp.cwd(f)
listdir()
listdir()
window.mainloop()
这是在我的大型应用程序中重现我的问题的简单代码。
系统:windows
python运行时间:python3.8
如何防止这个错误?我可以使用 python 命令行更改目录。 ftplib 没有抛出任何错误,我已经尝试在 ftp.
您需要在 lambda
函数中进行早期绑定。变化自
lambda: cdir(x)
至:
lambda y=x: cdir(y)
否则你会在调用函数时得到 x
的值,而不是创建函数时的值。
(显然你仍然需要告诉你的代码文件和目录之间的区别,因为有了上面的修复,你就可以导航到代表实际文件的按钮,然后点击那些按钮当它尝试将目录更改为它们时会出错。但以上内容将解决您现在遇到的问题。)