2016-05-30 2 views
13

Мне интересно, можно ли заполнить sys.argv (или какую-либо другую структуру) с помощью аргументов командной строки в ноутбуке jupyter/ipython, аналогично тому, как это делается через скрипт python ,Передача аргументов командной строки в argv в jupyter/ipython notebook

Например, если бы я работать питон скрипт следующим образом:

python test.py False

Тогда sys.argv будет содержать аргумент False. Но если я бегу jupyter ноутбук аналогичным образом:

jupyter notebook test.ipynb False

Тогда аргумент командной строки теряется. Есть ли способ получить доступ к этому аргументу из самого ноутбука?

+0

Нет. Ноутбуки часто загружаются из панели управления ноутбуком, поэтому для них не имеет смысла полагаться на аргументы командной строки. Если вы заинтересованы в переносе входных переменных в блокнот, посмотрите на [nbparameterise] (https://github.com/takluyver/nbparameterise), который по-разному относится к тому, как это сделать. –

ответ

1

После долгих поисков я нашел очень громоздкие, пользовательские библиотеки, но решили это с помощью нескольких строк кода, которые, как я думал, были довольно гладкими. Я использовал 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 работает правильно.

+0

Эй, круто! Спасибо, что зашли. Я давно перешел к другим проектам, и я уверен, что в тот момент я нашел несколько простых способов решения своей проблемы или использовал одну из громоздких библиотек, которые вы упомянули. Но это аккуратное небольшое исправление, и я буду отмечать его как ответ для любых будущих исследователей. – justadampaul

9

Я думаю, что это Gist может помочь вам: https://gist.github.com/gbishop/acf40b86a9bca2d571fa

Это попытка простого аргумента синтаксического анализа для большей части ключевых пар = значение, которые могут быть использованы как в командной строке и в IPython ноутбуков. Он поддерживает параметры запроса в URL-адресах ноутбуков и команду «Выполнить» для ноутбуков.

+0

Ссылка на решение приветствуется, но ваш ответ должен быть самодостаточным и полезным даже со ссылкой: пожалуйста, * укажите или суммируйте * соответствующую информацию со страницы, на которую вы ссылаетесь, в случае, если страница становится недоступной. –

-2

вы можете использовать встроенную магическую команду Jupyter %run внутри ноутбука.

С этого link, вы можете использовать:

%run -p [prof_opts] filename.py [args to program]

Или что-то вроде %run -i script.py False

Или, если вы разбор аргументов %run -i script.py --flag1 False --flag2 True

+4

Это ответ на другой вопрос. Это отвечает на вопрос «Как запустить скрипт python ** из ** ноутбука Jupyter». Исходный вопрос: «Как запустить Jupyter notebook ** в качестве скрипта ** с возможностью ** передать параметры командной строки **« –

Смежные вопросы