You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 11:50:34