Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to save a previous command line argument

I'm writing my first python command line tool using docopt and have run into an issue.

My structure is like this:

Usage:
  my-tool configure
  my-tool [(-o <option> | --option <option>)]
  ...

I'm trying to find a way to run my-tool -o foo-bar first, and then optionally pass the value 'foo-bar' into my configure function if I run my-tool configure next.

In pseduocode, that translates to this:

def configure(option=None):
    print option # With the above inputs this should print 'foo-bar'

def main():
    if arguments['configure']:
       configure(option=arguments['<option>'])
       return
    ...

Is there a way to get this working without changing the argument structure? I'm looking for a way to avoid my-tool configure [(-o <option> | --option <option>)]

like image 739
mdegges Avatar asked Jan 22 '26 17:01

mdegges


1 Answers

Since you run this on 2 different instances it might be best to store the values in some sort of config/json file that will be cleared each time you run "configure".

import json

def configure(config_file):
   print config_file[opt_name] # do something with options in file

   # clear config file
   with open("CONFIG_FILE.JSON", "wb") as f: config = json.dump([], f)

def main():
    # load config file
    with open("CONFIG_FILE.JSON", "rb") as f: config = json.load(f)

    # use the configure opt only when called and supply the config json to it
    if sys.argv[0] == ['configure']:
       configure(config)
       return

    # parse options example (a bit raw, and should be done in different method anyway)
    parser = OptionParser()
    parser.add_option("-q", action="store_false", dest="verbose")
    config_file["q"] = OPTION_VALUE
like image 141
Blackbeard Avatar answered Jan 24 '26 05:01

Blackbeard