Dopo un sacco di ricerca intorno ho molto trovato ingombranti, librerie personalizzate, ma l'ho risolto con poche righe di codice che pensavo fossero piuttosto lisce. Ho usato nbconvert per finire con un rapporto html come output che contiene tutti i grafici e markdown del notebook, ma accetta i parametri della riga di comando come sempre attraverso un wrapper python minimo:
Il file python test_args.py (che prende il comando params linea come normale):
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)
il notebook contiene:
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)
e posso correre il notebook pitone con argomenti analizzati come al solito:
python test_args.py my_input_file --int_param 12
Tendo ad incollare il blocco con chiamate argparse nel wrapper python in modo che gli errori della riga di comando vengano catturati dallo script python e -h funzioni correttamente.
fonte
2018-01-24 03:06:23
No. I quaderni sono spesso caricati dal cruscotto del notebook, quindi non avrebbe molto senso affidarsi agli argomenti della riga di comando. Se sei interessato a passare le variabili di input in un blocco note, dai un'occhiata a [nbparameterise] (https://github.com/takluyver/nbparameterise), che ha un approccio diverso su come farlo. –