第二次执行 os.walk 时找不到目录

Directory isn't found when executing os.walk for the second time

我有这个功能

def start(name):
for folder in next(os.walk("./hosted"))[1]:
    if folder == name:
        for file in os.listdir("./hosted/" + folder + "/scripts"):
            if file == "bot.py":
                os.chdir("./hosted/" + folder + "/scripts")
                os.system("python3.8 -c \"from bot import start; start()\" &")
                os.chdir(os.getcwd())

问题是,当我第二次尝试 运行 这个函数时,出现了一个错误,指出该目录不存在(在第 2 行出现)。我已经在函数外尝试 运行ning os.walk 两次并且它起作用了,所以这不是问题。

这是一个不和谐的机器人。我需要从这个初始化更多的机器人,这是我发现的最有用的方法(我接受建议)。因为 discord.py 是一个异步库,我需要 os.system 里面的 & 让机器人在后台保持 运行ning 而不会阻塞整个主机器人,我不不知道是否有另一种非阻塞方式来执行 python 脚本。

谢谢。

PS:我在 运行linux 上发布这个。

简而言之,问题是 os.chdir(os.getcwd()) 基本上什么都不做 -- 它意味着 "change to the current directory"。如果您使用 old = os.getcwd() 后接第一个 chdir,并将 nop 替换为 chdir(old),它可能符合您的期望。

也就是说,您最好使用 glob to find the files you're interested in and subprocess to manage other processes, though futures or asyncio 可能是更好的解决方案,具体取决于您的目标。