This is solved, I was being dumb. Please see second EDIT below

This isn’t really language specific, but if it helps I’m using Python. I can get the parameters just fine with the Traitlets module, but I’m still a novice really and figuring out which patterns to use is challenging.

Say you have a bunch of command line parameters. Some are booleans, where their presence means True, absence means False. Other parameters must accept one text string, and others can be used multiple times to build a list of strings.

It feels inefficient/wrong to use a bunch of IF/THEN/ELSE statements to decide what to do with the parameters, and prone to edge case errors. Is there a pattern that would invoke the correct method based on the combination of input parameters?

Examples:

app thing --dry-run --create --name=newname01 --name=newname02 --verbose

app thing --create --name=newname01 --name=newname02 --name=newname03

app job --cancel -i 01 -i 02 -i 03

EDIT: Via the Traitlets module, I get those arguments parsed and accessible as self.argname, so getting them into my app is working great. It’s just deciding what to do with them that is confusing me.

Thank you, sorry for my noobness.

EDIT2: I think I understand where I’m going wrong:

I’m creating subcommands based on objects, not actions. i.e. appname thing --action should really be appname action --thing. Once things are divided up into actions, assigning things to those actions will be much, much easier and straightforward.

Sorry for a confusing and fairly pointless post :(

  • @glad_cat
    link
    1110 months ago

    It’s never pointless. Command-line arguments are often tricky to get right, especially when your program can do a lot of different things.

    • sj_zero
      link
      fedilink
      610 months ago

      Strings and human beings are two things that mix to create really tough problems.

    • @bloopernova@programming.dev
      cake
      OP
      link
      fedilink
      English
      310 months ago

      I just wish I had thought things through correctly but I guess that’s part of becoming a more experienced coder. Arrrrggh! I’m so annoyed I wasted time on the otherwise excellent Traitlets’ argument parsing!

      • @glad_cat
        link
        410 months ago

        I said it a billion times before but: failing is how you learn. You discover why you’re wrong, and then you understand how to be right.

        That’s why I think juniors should not use ChatGPT but that’s another story…