Python if-elif argv返回

时间:2016-04-13 09:56:16

标签: python

我想在python中创建一个可以与我的argv一起使用的脚本,但是当我尝试这个简单的if-elif时,它什么也没有给我回复

import sys

if len(sys.argv) == 1:
        add = str(sys.argv[1])
        print add
elif len(sys.argv) == 2:
        add = str(sys.argv[1])
        add2 = str(sys.argv[2])
        print add + add2
elif len(sys.argv) > 4:
        print "too many"

当我运行这样的脚本时,有人可以解释一下原因:

$ python test.py 5 6

并且结果什么都没有,只有我运行这个

$ python test.py 5 6 7 8结果太多了

3 个答案:

答案 0 :(得分:2)

使用模块argparse的示例。位置参数是必需的,不允许参数,而是可选参数允许N个参数。

from argparse import ArgumentParser

parser = ArgumentParser(description='%(prog)s is a argparse demo')

# Optional argument that requires two arguments
parser.add_argument('-two_args', nargs=2)

# Optional argument that requires 1 to N arguments
parser.add_argument('-one_n_args', nargs='+')

# Optional argument that requires 0 to N arguments
parser.add_argument('-zero_n_args', nargs='*')

args = parser.parse_args()
print 'args.two_args:', args.two_args
print 'args.one_n_args:', args.one_n_args
print 'args.zero_n_args:', args.zero_n_args

试验:

C:\>python demo.py --help
usage: demo.py [-h] [-two_args TWO_ARGS TWO_ARGS]
               [-one_n_args ONE_N_ARGS [ONE_N_ARGS ...]]
               [-zero_n_args [ZERO_N_ARGS [ZERO_N_ARGS ...]]]

demo.py is demo

optional arguments:
  -h, --help            show this help message and exit
  -two_args TWO_ARGS TWO_ARGS
  -one_n_args ONE_N_ARGS [ONE_N_ARGS ...]
  -zero_n_args [ZERO_N_ARGS [ZERO_N_ARGS ...]]

C:\>python demo.py -two_args 1
usage: demo.py [-h] [-two_args TWO_ARGS TWO_ARGS]
               [-one_n_args ONE_N_ARGS [ONE_N_ARGS ...]]
               [-zero_n_args [ZERO_N_ARGS [ZERO_N_ARGS ...]]]
demo.py: error: argument -two_args: expected 2 argument(s)

C:\>python demo.py -two_args 1 2 -one_n_args x -zero_n_args
args.two_args: ['1', '2']
args.one_n_args: ['x']
args.zero_n_args: []

C:\>python demo.py -two_args 1 2 -one_n_args x -zero_n_args a b c d
args.two_args: ['1', '2']
args.one_n_args: ['x']
args.zero_n_args: ['a', 'b', 'c', 'd']

前一段时间我在博客中写了一篇文章(西班牙语,对不起)http://www.3engine.net/wp/2015/02/argparse-modulo-de-analisis-de-linea-de-comandos-para-python/

答案 1 :(得分:1)

sys.argv[0]是您脚本的名称。参数从1开始。因此,在第一种情况下,您的sys.argv实际上类似于['test.py', '5', '6']

答案 2 :(得分:1)

根据已经给出的评论和答案,此程序更新应该可以正常工作:

import sys

if len(sys.argv) == 2:
  print(sys.argv[1])
elif len(sys.argv) == 3:
  print(str(sys.argv[1]) + str(sys.argv[2]))
elif len(sys.argv) > 3:
  print("too many")

我建议你打印一些不清楚的东西。使用简单的print(sys.argv),您将获得['test.py', '3', '4']。在进入文档之前,我总是做这种快速测试,这节省了我很多时间;)。