20

how do I print help info if no arguments are passed to python script?

#!/usr/bin/env python

import sys

for arg in sys.argv:
    if arg == "do":
        do this
    if arg == ""
        print "usage is bla bla bla"

what I'm missing is if arg == "" line that I don't know how to express :(

8 Answers 8

30
if len(sys.argv) == 1:
    # Print usage...

The first element of sys.argv is always either the name of the script itself, or an empty string. If sys.argv has only one element, then there must have been no arguments.

http://docs.python.org/library/sys.html#sys.argv

Sign up to request clarification or add additional context in comments.

Comments

15
if len(sys.argv)<2:

The name of the program is always in sys.argv[0]

1 Comment

I would have just said == 1 but it's all the same.
6

The following is a very Pythonic way of solving your problem, because it deliberately generates an exception within try .. except:

import sys

try:   
   sys.argv[1:] // do something with sys.argv[1:]  
except IndexError:  
   print "usage is..."
   sys.exit()

Comments

6

You can check if any args were passed in by doing:

#!/usr/bin/env python

import sys
args = sys.argv[1:]

if args:
    for arg in args:
        if arg == "do":
            # do this
else:
    print "usage is bla bla bla"

However, there are Python modules called argparse or OptParse (now deprecated) that were developed explicitly for parsing command line arguments when running a script. I would suggest looking into this, as it's a bit more "standards compliant" (As in, it's the expected and accepted method of command line parsing within the Python community).

Comments

3
import argparse

def parse_args():
    parser = argparse.ArgumentParser(
        add_help=True,
    )

    # your arguments here

    if len(sys.argv) == 1:
        parser.print_help()
        sys.exit(0)
    else:
        options = parser.parse_args()

    return options

Comments

1
#!/usr/bin/env python

import sys
args = sys.argv[1:]

if args:
    for arg in args:
        if arg == "do":
            # do this
else:
    print "usage is bla bla bla"

1 Comment

the if followed by the for feels a bit redundant to me. I added a variation of your answer to show what I mean
1

Based on Noctis Skytower's answer

import sys
args = sys.argv[1:]

for arg in args:
    if arg == "do":
        # do this

if not args:
    print "usage is bla bla bla"

1 Comment

There is a problem with your second example. You have to break before you enter the else block if you do not want it to run.
1

I recommend you use the lib optparse [1], is more elegant :D

[1] More powerful command line option parser < http://docs.python.org/library/optparse.html >

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.