Python中subprocess创建目录后os.chdir报FileNotFoundError的解决方法
问题根源
你遇到的FileNotFoundError是因为sp.Popen是异步执行的——调用它之后,Python不会等mkdir命令创建完目录就立刻执行os.chdir,这时候目录可能还没生成,自然找不到。
解决方法
有三种靠谱的处理方式,按推荐度排序:
1. 用Python内置方法创建目录(最推荐)
直接用os.makedirs()替代shell的mkdir,它是同步执行的,跨平台兼容性更好,还能直接处理目录已存在的情况:
import os import subprocess as sp # exist_ok=True 表示如果目录已存在也不会报错 os.makedirs("MyFolder", exist_ok=True) os.chdir("./MyFolder") sp.run("touch ImInMyFolder.txt", shell=True)
2. 用subprocess.run()替代Popen
run()会等待shell命令执行完成再继续后续代码,比Popen更适合这种需要同步的场景,加上check=True还能在命令执行失败时抛出异常,方便排查问题:
import os import subprocess as sp # 加-p参数确保目录已存在时不报错 sp.run("mkdir -p MyFolder", shell=True, check=True) os.chdir("./MyFolder") sp.run("touch ImInMyFolder.txt", shell=True)
3. 给Popen加等待逻辑
如果一定要用Popen,必须调用wait()方法等待进程执行完毕,再执行后续操作:
import os import subprocess as sp proc = sp.Popen("mkdir MyFolder", shell=True) proc.wait() # 等待mkdir命令执行完成 os.chdir("./MyFolder") sp.Popen("touch ImInMyFolder.txt", shell=True)
内容的提问来源于stack exchange,提问作者brownser
相关产品推荐
相关产品推荐

