По сути, я получаю несколько файлов python в том же каталоге моей основной программы jupyter, и внутри этой основной программы мне нужна ячейка, которая будет запускать все остальные файлы python.
*примечание: файлы py генерируются динамически
Я пытался использовать что-то вроде
%run *.py
Или что-то вроде:
While True: %run "script1.py"
Но мне нужно динамически установить имя скрипта
Это запустит каждый файл сценария .py в текущем каталоге, в котором запущен блокнот, даже те файлы сценариев, которые последующие сценарии создают в том же каталоге:
import os
import fnmatch
import glob
executed_scripts = []
extension_to_match = ".py"
def execute_script(s):
%run {s}
while set(executed_scripts) != set(glob.glob(f"*{extension_to_match}")):
for file in os.listdir('.'):
if fnmatch.fnmatch(file, '*'+extension_to_match):
if file not in executed_scripts:
execute_script(file)
executed_scripts.append(file)
Я попытался сделать это универсальным, не полагаясь на какие-либо специальные пакеты, позволяющие обрабатывать подстановочные знаки оболочки.
Вы можете увидеть, как это продемонстрировано в действии внизу этого блокнота. Начальные ячейки в этой записной книжке настраивают ситуацию, создавая два сценария, каждый из которых порождает еще три сценария. Каждый скрипт запускается один раз.
Заголовок блокнота содержит инструкции о том, как вы можете перейти сюда и нажать launch binder, чтобы получить сеанс, обслуживаемый MyBinder.org, где этот блокнот будет работать. После запуска сеанса вы можете ввести !curl -OL https://gist.githubusercontent.com/fomightez/bcbeaa34f258e6ab959c842438077cb8/raw/4aa21f205c663688ef552acc38293d574c9667c4/for_so75075576.ipynb в ячейку записной книжки, чтобы получить записную книжку в сеансах, а затем открыть ее и активно запустить.
На самом деле есть несколько способов сделать это. И поэтому было бы неплохо упомянуть детали вашей системы и / или насколько она универсальна.