Skip to content

Instantly share code, notes, and snippets.

@wassname
Last active March 5, 2025 06:41
Show Gist options
  • Select an option

  • Save wassname/f1c23636cc04b39176bd82f45c6e398a to your computer and use it in GitHub Desktop.

Select an option

Save wassname/f1c23636cc04b39176bd82f45c6e398a to your computer and use it in GitHub Desktop.
argparse in jupyter?
"""
sometimes you want to run or adapt a cli script from jupyter, here a decent way to do it
# https://gist.github.com/wassname/f1c23636cc04b39176bd82f45c6e398a
"""
def jupyter_argparse(s: str) -> list:
"""
Usage
s = '''
--rank 16
--context=128
--vae_context=64
'''
argv = jupyter_argparse(s)
args = parser.parse_args(argv)
"""
argvs = s.replace('\n', ' ').strip()
argv = [s.strip() for s in argvs.split(" ") if s and not s.startswith("#")]
return argv
argvs = """
--rank 16
--context=128
--vae_context=64
"""
argvs = argvs.replace('\n', ' ').strip()
argv = [s.strip() for s in argvs.split(" ") if s and not s.startswith("#")]
print(argv)
args = parser.parse_args(argv)
args
# or using a argparse Namespace
from argparse import Namespace
Namespace(a=1)
# another way with no args is
args = parser.parse_known_args()[0]
args.__dict__['a']=1 # an any positional args
# a better way might be to use https://pypi.org/project/simple-parsing/ where you can just insansiate the options classe
@wassname
Copy link
Author

wassname commented Mar 5, 2025

import sys
from contextlib import contextmanager

@contextmanager
def mock_argv(argv_list=['python' 'script']):
    """Temporarily replace sys.argv with the provided list."""
    old_argv = sys.argv
    sys.argv = argv_list
    try:
        yield
    finally:
        sys.argv = old_argv

# Now use it with parse_args
with mock_argv(['program_name']):  # Add any arguments you need after 'program_name'
    args = parse_args()

# Or with specific arguments
with mock_argv(['program_name', '--model', 'llama-7b', '--dataset', 'my_data.jsonl']):
    args = parse_args()

args.progam_name = '1'
args.__dict__.update(program_name=1)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment