После долгих поисков я нашел очень громоздкие, пользовательские библиотеки, но решили это с помощью нескольких строк кода, которые, как я думал, были довольно гладкими. Я использовал nbconvert для вывода html-отчета в виде вывода, который содержит всю графику и уценку из ноутбука, но принимает параметры командной строки, как всегда, через минимальную оболочку python:
Файл python test_args.py (который принимает команду линия PARAMS как нормальный):
import sys,os
IPYNB_FILENAME = 'test_argv.ipynb'
CONFIG_FILENAME = '.config_ipynb'
def main(argv):
with open(CONFIG_FILENAME,'w') as f:
f.write(' '.join(argv))
os.system('jupyter nbconvert --execute {:s} --to html'.format(IPYNB_FILENAME))
return None
if __name__ == '__main__':
main(sys.argv)
ноутбук содержит:
import sys,os,argparse
from IPython.display import HTML
CONFIG_FILE = '.config_ipynb'
if os.path.isfile(CONFIG_FILE):
with open(CONFIG_FILE) as f:
sys.argv = f.read().split()
else:
sys.argv = ['test_args.py', 'input_file', '--int_param', '12']
parser = argparse.ArgumentParser()
parser.add_argument("input_file",help="Input image, directory, or npy.")
parser.add_argument("--int_param", type=int, default=4, help="an optional integer parameter.")
args = parser.parse_args()
p = args.int_param
print(args.input_file,p)
и я могу запустить питона ноутбук с аргументами разбираемых как обычно:
python test_args.py my_input_file --int_param 12
Я стараюсь вставлять блок с помощью вызовов argparse в оболочку python, чтобы ошибки командной строки были пойманы скриптом python и -h работает правильно.
Нет. Ноутбуки часто загружаются из панели управления ноутбуком, поэтому для них не имеет смысла полагаться на аргументы командной строки. Если вы заинтересованы в переносе входных переменных в блокнот, посмотрите на [nbparameterise] (https://github.com/takluyver/nbparameterise), который по-разному относится к тому, как это сделать. –