批量执行目录及子目录Python文件时,输出文本文件无法生成求助
问题分析与解决方法
问题根源
你遇到的核心问题是工作目录不匹配:
- 用
os.system或subprocess.run执行子目录中的Python脚本时,子进程默认继承父脚本的工作目录,而非目标脚本所在的子目录。 - 如果目标脚本用相对路径(比如
open('population.txt', 'w'))写入文件,文件会被创建在父脚本的运行目录下,而非你期望的子目录,看起来像是没生成。 - 手动进入子目录运行脚本时,工作目录就是该子目录,所以文件能正常生成在对应位置。
另外,你原来的os.system("python" + filepath)存在语法错误——python和filepath之间没有空格,会导致命令执行失败(比如变成pythonpath/to/script.py,系统无法识别)。
修复方案
改用subprocess.run并指定cwd参数,强制子进程在目标脚本所在的目录下运行。修改后的完整代码如下:
import os import subprocess import glob root_dir = "path/to/root/directory" for dirpath, dirnames, filenames in os.walk(root_dir): # 删除当前目录下的旧txt文件 for text_file in glob.glob(os.path.join(dirpath, '*.txt')): os.remove(text_file) # 执行当前目录下的Python脚本 for filename in filenames: if filename.endswith(".py"): # 用subprocess.run指定工作目录为dirpath(脚本所在目录) subprocess.run(["python", filename], cwd=dirpath, check=True) # 如果你的环境中python3才是正确命令,替换成["python3", filename]
关键说明
cwd=dirpath:将子进程的工作目录设置为当前遍历到的dirpath,也就是目标Python脚本所在的目录,这样脚本里的相对路径会基于该目录生成文件。check=True:可选参数,若子进程执行失败会抛出异常,方便排查错误。- 放弃
os.system:subprocess模块比os.system更灵活、安全,能更好地控制子进程的运行环境。
内容的提问来源于stack exchange,提问作者Sarfraz
相关产品推荐
相关产品推荐

