python-2.7 - 从列表中执行 python 文件

标签 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 notebook)

for i in range(len(pylist)):
    !python pylist[i]

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

for i in range(len(pylist)):
    execfile(pylist[i])

但这给了我一个

indexError: list index out of range

使用其中一个 python 文件,如果我直接转到该文件夹​​并执行该文件,我将无法获得该文件。另一个测试是使用 subprocess,为此我遇到了权限错误:

OSError: [Errno 13] Permission denied

我怀疑这可能是因为 .py 文件没有可执行权限。但是,让每个文件都成为可执行文件是另一个问题。

在列表中执行 python 文件的正确方法是什么?

编辑:更具体

当转到我的 jupyter notebook 上的特定目录并执行文件时

!python file1.py

它工作正常,但是在使用列表时我得到了

for fname in pylist:    
    !python fname

python: can't open file 'fname': [Errno 2] No such file or directory

所以看起来 python 并没有读取列表中的元素,而是试图执行 fname。我检查了 os.path.abspath(fname) 路径是否正确。

最佳答案

您的循环存在一些问题。没有必要获取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

关于python-2.7 - 从列表中执行 python 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48834631/

相关文章:

python - python 中的 execfile() ,使用它作为用户输入

Python:来自其他文件工作目录的execfile?

mysql - 如何获取所有表以及每个表的行数

python-2.7 - 在使用图像尺寸训练神经网络之前是否有启发式方法来均匀化图像尺寸?

python - 如何编写subprocess.Popen终端执行

python - 难以捕获执行就地状态更新的子流程的输出

python - Python 3 中 execfile 的替代方案?

python - 将 wxPanel 保存到图像

Python:setup.py - 想要确保安装了正确版本的 python-daemonize

python - 在windows上通过python调用使用linux子系统编译的程序