Python执行目录和子目录中的所有Python文件

标签 python

我正在尝试使用此代码来更新城市人口数据,但 python 文件未将输出结果写入该文件夹

import os
import subprocess
import glob

root_dir = "path/to/root/directory"

for dirpath, dirnames, filenames in os.walk(root_dir):
    for text_file in glob.glob(os.path.join(dirpath, '*.txt')):
        os.remove(text_file)

    for filename in filenames:
        if filename.endswith(".py"):
            filepath = os.path.join(dirpath, filename)
            os.system("python" + filepath)
            
            or 

            subprocess.run(["python", filepath])

它正在删除旧的文本文件,但 python 文件没有生成更新的数据,并且在子进程中它显示在命令提示符中,但没有写入文本文件,甚至没有创建新的文本文件

但是当我手动转到该文件夹​​并运行 Python 文件时,它工作正常

最佳答案

os.system("python"+ filepath) 的问题是 "python" 和文件之间没有空格,因此它将尝试运行类似 pythontest.py 的命令,这是一个无效命令。第二个问题是您的程序可能会自行运行,从而导致无限循环。要解决此问题,请在运行之前使用 __file__ 变量检查该文件是否是当前文件。试试这个代码:

import os
import subprocess
import glob

root_dir = os.getcwd()
for dirpath, dirnames, filenames in os.walk(root_dir):
    for text_file in glob.glob(os.path.join(dirpath, '*.txt')):
        os.remove(text_file)

    for filename in filenames:
        if filename.endswith(".py") and os.path.join(root_dir, filename) != __file__:
            filepath = os.path.join(dirpath, filename)
            subprocess.run(["python", filepath])

请注意,我还更改了 root_dir 以自动获取当前目录。如果您愿意,可以更改此设置。

另外,感谢 MrChadMWoods用于帮助捕获当前文件检测中的边缘情况。

关于Python执行目录和子目录中的所有Python文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75197327/

相关文章:

python - 从网页链接直接加载图像到 NumPy 数组 (Python)

python - 在列表中查找小于特定数字的最大组合时代码效率低下

python - 实现 Every-to-Every 交互的有效方法?

python - Appengine Blobstore : Index out of range

python - 使用 python 2.7 中的列表推导式将对象值列表连接到字符串中

java - 如何在Jython中减少声音?

python - 为本地库创建本地环境的框架

python - 如何在 BeautifulSoup 中查找类以字符串开头的所有 div?

python - 如何检查python模块是否存在并且可以导入

python - 如何在Python中将2 channel 光流灰度JPG图像合并为一张RGB图像?