【发布时间】:2018-07-27 19:50:26
【问题描述】:
我使用os.walk()和endswith(file.py)在一些子文件夹中搜索了python脚本,并将它们放在一个列表中。现在我正在尝试执行它们。所以我有一个类型的列表:
pylist = ['./1/file1.py', './2/file2.py', ...]
我已经尝试使用 for 循环来执行它们:
for i in range(len(pylist)):
%run pylist[i]
还有(我使用的是 jupyter 笔记本)
for i in range(len(pylist)):
!python pylist[i]
但是在这两种情况下它都找不到文件pylist[i].py,所以它没有获取列表的内容。我也试过了
for i in range(len(pylist)):
execfile(pylist[i])
但这给了我一个
indexError: 列表索引超出范围
使用其中一个 python 文件,如果我直接进入该文件夹并执行该文件,我不会得到它。另一个测试是使用subprocess,我得到了一个权限错误:
OSError: [Errno 13] 权限被拒绝
我怀疑这可能是因为 .py 文件没有可执行权限。但是,使每个文件都成为可执行文件是另一个问题。
在列表中执行python文件的正确方法是什么?
编辑:更具体
当转到我的 jupyter notebook 上的特定目录并执行文件时
!python file1.py
它工作正常,但使用列表时我得到了
for fname in pylist:
!python fname
python: 无法打开文件 'fname': [Errno 2] 没有这样的文件或目录
所以看起来python没有读取列表中的元素,而是试图执行fname。我检查了os.path.abspath(fname) 路径是否正确。
【问题讨论】:
标签: python-2.7 subprocess execfile