У меня работает ноутбук Jupyter. Я хочу иметь доступ к источнику текущей записной книжки Jupyter из Python. Моя конечная цель - передать его в ast.parse
, чтобы я мог провести некоторый анализ кода пользователя. В идеале я мог бы сделать что-то вроде этого:
import ast
ast.parse(get_notebooks_code())
Очевидно, что если исходный код был файлом IPYNB, был бы промежуточный этап извлечения кода из ячеек Python, но решить эту проблему довольно просто.
Пока что я нашел код, который будет использовать функцию list_running_servers
объекта IPython для того, чтобы сделать запрос и сопоставить идентификаторы ядра - это дает мне имя файла работающей в данный момент записной книжки. Это будет работать, за исключением того факта, что исходный код на диске может не совпадать с тем, что есть у пользователя в браузере (пока вы не сохраните новую контрольную точку).
Я видел некоторые идеи, связанные с извлечением данных с использованием JavaScript, но для этого требуется либо отдельная ячейка с магией, либо вызов функции display.Javascript, которая запускается асинхронно и поэтому не позволяет мне передать результат ast.parse
.
У кого-нибудь есть какие-нибудь умные идеи о том, как динамически получить текущий код записной книжки, доступный в виде строки в Python для немедленной обработки? У меня все отлично, если мне нужно сделать это расширением или даже оболочкой ядра, мне просто нужно каким-то образом получить исходный код.