George Fischhof <geo...@fischhof.hu> writes: > George Fischhof <geo...@fischhof.hu> ezt írta (időpont: 2021. aug. 29., V, > 21:27): > >> >> >> Loris Bennett <loris.benn...@fu-berlin.de> ezt írta (időpont: 2021. aug. >> 26., Cs, 16:02): >> >>> George Fischhof <geo...@fischhof.hu> writes: >>> >>> [snip (79 lines)] >>> >>> >> > Hi, >>> >> > >>> >> > Also you can give a try to click and / or typer packages. >>> >> > Putting args into environment variables can be a solution too >>> >> > All of these depends on several things: personal preferences, >>> colleagues >>> >> / >>> >> > firm standards, the program, readability, variable accessibility (IDE >>> >> > support, auto completition) (env vars not supported by IDEs as they >>> are >>> >> not >>> >> > part of code) >>> >> >>> >> Thanks for the pointers, although I have only just got my head around >>> >> argparse/configargparse, so click is something I might have a look at >>> >> for future project. >>> >> >>> >> However, the question of how to parse the arguments is somewhat >>> separate >>> >> from that of how to pass (or not pass) the arguments around within a >>> >> program. >>> >>> [snip (16 lines)] >>> > >>> > Hi, >>> > I thought not just parsing, but the usage method: you add a decorator to >>> > the function where you want to use the parameters. This way you do not >>> have >>> > to pass the value through the calling hierarchy. >>> > >>> > Note: typer is a newer package, it contains click and leverages command >>> > line parsing even more. >>> >>> Do you have an example of how this is done? From a cursory reading of >>> the documentation, it didn't seem obvious to me how to do this, but then >>> I don't have much understanding of how decorators work. >>> >>> Cheers, >>> >>> Loris >>> >>> >>> -- >>> This signature is currently under construction. >>> -- >>> https://mail.python.org/mailman/listinfo/python-list >> >> >> Hi, >> >> will create a sample code on Monday - Tuesday >> >> BR, >> George >> > > > Hi, > > here is the program ;-) (see below) > typer does not uses decorators, to solve this problem they advice to use > click's decorators, mixing typer and click. > Practically I prefer not to mix them, also the parts for easiest way to do > this just available in latest click, which is not supported in typer. > > So I created all the stuff in click, 8.x should be used > > BR, > George > > > import click > > > # read command line parameters > @click.command() > @click.option('--level_1', help='Level 1') > @click.option('--level_2', help='Level 2') > def main(level_1, level_2): > # put command line parameters into global context > ctx = click.get_current_context() > ctx.meta['level_1'] = level_1 > ctx.meta['level_2'] = level_2 > > level_1_function() > > > # pass / inject level_1 parameter to this function > @click.decorators.pass_meta_key('level_1') > def level_1_function(level_1): > print(f'level 1 variable: {level_1}') > level_2_function() > > > # pass / inject level_2 parameter to this function > @click.decorators.pass_meta_key('level_2') > def level_2_function(level_2): > print(f'level 2 variable: {level_2}') > > > if __name__ == "__main__": > main()
Thanks for the example - that's very interesting. However, after a bit of reflection I think I am going to stick to explicit argument passing, so that I can have more generic modules that can be used by other programs. I'll then just encapsulate the argument parsing in a single function corresponding to the command line tool. Cheers, Loris -- This signature is currently under construction. -- https://mail.python.org/mailman/listinfo/python-list