我使用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笔记本上的特定目录并执行
文件时!python file1.py
它工作正常,但在使用列表时我得到了
for fname in pylist:
!python fname
python:无法打开文件' fname':[Errno 2]没有这样的文件或目录
所以看起来python不是在读取列表中的元素而是试图执行fname
。我用os.path.abspath(fname)
检查了路径是否正确。
答案 0 :(得分:0)
循环中有一些问题。没有必要得到len,然后查找索引。 for...in...
循环将获得实际的文件字符串。您可以使用subprocess
模块拨打电话。
import subprocess
files = ['./py1.py', './py2.py']
for fname in files:
subprocess.call([fname])
print("done")
我有一个hashbang和print的py1和py2的内容:
#!/usr/bin/env python
# py1.py
print("test 1")
最后,您始终可以导入文件,但使用列表执行此操作可能具有挑战性。
>>>import py1
test 1