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

批量执行目录及子目录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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 00:20:32