пустой аргумент питона - PullRequest
       8

пустой аргумент питона

18 голосов
/ 03 февраля 2010

как вывести справочную информацию, если в скрипт python не переданы аргументы?

#!/usr/bin/env python

import sys

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

мне не хватает строки if arg == "", которую я не знаю, как выразить :(

Ответы [ 8 ]

21 голосов
/ 03 февраля 2010
if len(sys.argv) == 1:
    # Print usage...

Первым элементом sys.argv всегда является либо имя самого скрипта, либо пустая строка. Если sys.argv имеет только один элемент, значит, аргументов не должно быть.

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

13 голосов
/ 03 февраля 2010
if len(sys.argv)<2:

Название программы всегда в sys.argv [0]

6 голосов
/ 03 февраля 2010

Как уже говорили другие, вы можете проверить, были ли переданы какие-либо аргументы, выполнив:

#!/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"

Однако, есть модуль Python под названием OptParse , который был разработан специально для анализа аргументов командной строки при запуске скрипта. Я бы посоветовал разобраться в этом, так как это немного более «соответствует стандартам» (как, впрочем, это ожидаемый и принятый метод анализа командной строки в сообществе Python).

4 голосов
/ 16 июля 2012

Ниже приведен очень Pythonic способ решения вашей проблемы, потому что он намеренно генерирует исключение при попытке .. кроме:

import sys

try:   
   sys.argv[1:] // do something with sys.argv[1:]  
except IndexError:  
   print "usage is..."
   sys.exit()
1 голос
/ 04 февраля 2010

Я рекомендую вам использовать lib optparse [1], более элегантно: D

[1] Более мощный анализатор параметров командной строки <<a href="http://docs.python.org/library/optparse.html" rel="nofollow noreferrer">http://docs.python.org/library/optparse.html>

1 голос
/ 03 февраля 2010

На основании ответа Noctis Skytower

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 голос
/ 03 февраля 2010
#!/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"
0 голосов
/ 06 августа 2015
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
...