我正在尝试使用此代码来更新城市人口数据,但 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/