我用于连接和显示 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 的值,而不是创建函数时的值。


(显然你仍然需要告诉你的代码文件和目录之间的区别,因为有了上面的修复,你就可以导航到代表实际文件的按钮,然后点击那些按钮当它尝试将目录更改为它们时会出错。但以上内容将解决您现在遇到的问题。)