Выполнить файлы Python из списка
Я сделал поиск скриптов Python в некоторых подпапках, используя os.walk()
а также endswith(file.py)
и поместите их в список. Сейчас я пытаюсь их казнить. Итак, у меня есть список типа:
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)
что пути правильные.
1 ответ
У вас есть несколько проблем с вашей петлей. Нет необходимости получать len, а затем искать индекс. for...in...
цикл получит фактическую строку файла. Вы можете использовать subprocess
модуль для звонка.
import subprocess
files = ['./py1.py', './py2.py']
for fname in files:
subprocess.call([fname])
print("done")
содержимое py1 и py2, что у меня есть hashbang и печать:
#!/usr/bin/env python
# py1.py
print("test 1")
Наконец, вы всегда можете импортировать файлы, но сделать это со списком может быть непросто.
>>>import py1
test 1