Python 2.7 从列表中执行python文件

Python 2.7 从列表中执行python文件,python-2.7,subprocess,execfile,Python 2.7,Subprocess,Execfile,我使用os.walk()和endswith(file.py)搜索了一些子文件夹中的python脚本,并将它们放在一个列表中。现在我正试图执行它们。因此,我有一个类型列表: pylist = ['./1/file1.py', './2/file2.py', ...] 我尝试使用for循环执行它们: for i in range(len(pylist)): %run pylist[i] 还有(我用的是jupyter笔记本) 但在这两种情况下,它都找不到文件pylist[i].py,因此它

我使用
os.walk()
endswith(file.py)
搜索了一些子文件夹中的python脚本,并将它们放在一个列表中。现在我正试图执行它们。因此,我有一个类型列表:

pylist = ['./1/file1.py', './2/file2.py', ...]
我尝试使用for循环执行它们:

for i in range(len(pylist)):
    %run pylist[i]
还有(我用的是jupyter笔记本)

但在这两种情况下,它都找不到文件
pylist[i].py
,因此它不获取列表的内容。我也试过了

for i in range(len(pylist)):
    execfile(pylist[i])
但这给了我一个机会

索引器:列表索引超出范围

使用其中一个python文件,如果直接转到文件夹并执行该文件,则无法获取该文件。还有一个测试使用了
子流程
,我得到了一个权限错误:

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)
检查了路径是否正确。

您的循环出现了一些问题。不需要获取len,然后查找索引。一个
for…in…
循环将获得实际的文件字符串。您可以使用
子流程
模块进行调用

import subprocess

files = ['./py1.py', './py2.py']

for fname in files:

    subprocess.call([fname])


print("done")
py1和py2的内容,我有一个hashbang和一个print:

#!/usr/bin/env python

# py1.py
print("test 1")
最后,您始终可以导入文件,但使用列表执行此操作可能具有挑战性

>>>import py1
test 1

您是否为py1和py2授予了权限?e、 g.
chmod+x py1.py
?因为这对我不起作用,所以我收到一个“权限被拒绝”错误。我没有明确授予文件权限,但是在检查时,看起来它们都有exe权限。它一定继承了它。可能是一个noob问题,但是当我从与test.py位于同一目录中的脚本运行
subprocess.call(“test.py”)
时,它会给出一个关于找不到文件的错误。更明确地说,我在同一个目录中有caller.py和test.py,caller正在运行上述代码。知道我做错了什么吗?天哪,我真是个笨蛋。对于未来的读者:
subprocess.call(['python','test.py'])
。需要调用python来运行它,因为它不在路径中。
>>>import py1
test 1