I have gone through the sys
documentation, however there is something that is still unclear to me. I have looked for some similar question on stackoverflow, but I h
Other than using argparse
(which I do recommend), this can be solved by slicing and expanding:
sys.exit(example(*sys.argv[1:7]))
The slice will only contain elements that actually exist, even if there aren't enough to fulfill the size of slice requested.
I suggest you use argparse (and here is the tutorial ). Saves you having to manually check for the existence of parameters. Moreover argparse gives you the --help
argument as a freebie, which will read the help=""
string defined for each argument, if provided.
In your case you have three mandatory (positional) argument and three optional ones. A sample argparse code would look like this:
#!/usr/bin/python
# coding: utf-8
import argparse
def parseArguments():
# Create argument parser
parser = argparse.ArgumentParser()
# Positional mandatory arguments
parser.add_argument("creditMom", help="Credit mom.", type=float)
parser.add_argument("creditDad", help="Credit dad.", type=float)
parser.add_argument("debtMom", help="Debt mom.", type=float)
# Optional arguments
parser.add_argument("-dD", "--debtDad", help="Debt dad.", type=float, default=1000.)
parser.add_argument("-s", "--salary", help="Debt dad.", type=float, default=2000.)
parser.add_argument("-b", "--bonus", help="Debt dad.", type=float, default=0.)
# Print version
parser.add_argument("--version", action="version", version='%(prog)s - Version 1.0')
# Parse arguments
args = parser.parse_args()
return args
def example(credit_mom, credit_dad, debt_mom, debt_dad = 1000, salary = 2000, bonus = 0):
total_gain = salary + credit_dad + credit_mom + bonus
total_loss = debt_dad + debt_mom
return total_gain - total_loss
if __name__ == '__main__':
# Parse the arguments
args = parseArguments()
# Raw print arguments
print("You are running the script with arguments: ")
for a in args.__dict__:
print(str(a) + ": " + str(args.__dict__[a]))
# Run function
print(example(args.creditMom, args.creditDad, args.debtMom, args.debtDad, args.salary, args.bonus))
While I endorse the argparse
approach, here's a quick and dirty approach:
arg1, arg2, arg3 = [None, False, []]
if sys.argv[1:]: # test if there are atleast 1 argument (beyond [0])
arg1 = sys.argv[1]
if sys.argv[2:]:
arg2 = sys.argv[2] # careful 'True' is a string, not a boolean
arg3 = sys.argv[3:] # rest
Mostly I use this when I'm starting to add argument parsing to a script, and my choices of arguments hasn't matured. It's more suited to 'positionals' than 'optionals' (to use argparse terminology).
Your function "example" is just fine. The problem is that you're trying to read sysargs that aren't there. Try to check if they are empty (in the else-clause).