13

I would like to write an argument in an application where the argument that I am calling needs to be referenced on the first iteration/run of the script where the initial_run is set to True. Otherwise this value should be left as false. Now this parameter is configured in a configuration file.

The current code that I written is below. What should be changed in this code to return the True value? Now it only returns the value False.

import sys  
# main
param_1= sys.argv[0:] in (True, False)
print 'initial_run=', param_1
gwestdev1
  • 141
  • 2
  • 2
  • 6
  • 4
    Command line arguments are always strings -- the entry point for a C program is specified as `int main(int argc, char* argv)`, and the `execv` family of syscalls takes arguments as an array of C strings. Since that's how the operating system hands them off, they can't possibly be anything else without being converted, parsed or casted. – Charles Duffy Dec 06 '16 at 23:10
  • 3
    You could use argparse(http://stackoverflow.com/questions/15008758/parsing-boolean-values-with-argparse) which is a part of the standard library. Among third party libraries Click can be a good option(http://click.pocoo.org/5/options/#boolean-flags). – Vikas Tikoo Dec 06 '16 at 23:14

3 Answers3

18

Running the script from the command line:

# ./my_script.py true

The boolean can be obtined by doing:

import sys

initial_run = sys.argv[1].lower() == 'true'

This way we are doing a comparison of the first argument lowercased to be 'true', and the comparison will return boolean True if the strings match or boolean False if not.

Dalvenjia
  • 1,953
  • 1
  • 12
  • 16
3

change

param_1 = sys.argv[0:] in (True, False)

to:

param_1 = eval(sys.argv[1])
assert isinstance(param_1, bool), raise TypeError('param should be a bool')
Thmei Esi
  • 434
  • 2
  • 9
0

Not sure if may help, what about using argparse?

import argparse

def read_cmdline():
    p=argparse.ArgumentParser()
    p.add_argument("-c","--clear",type=bool, choices=[True,False],required=True)
    args=p.parse_args()
    return args 


if __name__=="__main__":
    args=read_cmdline()
    if args.clear:
        ###actions when clear is True
    else:
        ## actions when clear is False

Note the type=bool in add_argument

Robert Ribas
  • 289
  • 3
  • 7