Python:如果最后一个sys.argv为空,则跳过

时间:2013-08-20 08:50:40

标签: python

我运行脚本:python script.py arg1 arg2,但我想做的诀窍,如果提供arg3然后做一些事情。当前代码看起来像这样,但不起作用。

if len(sys.argv) == 3:
    pannot = open(sys.argv[3],"w")
    for v in anno2.values():
        pannot.write("\t".join(v))
        pannot.write("\n")
    pannot.close()
else: print("if you want to get an annotation, please, provide third argument")

错误如下:IndexError: list index out of range。你能告诉我这是什么问题吗? (脚本在windows下测试过。)

3 个答案:

答案 0 :(得分:3)

我相信这是因为script.py作为第一个参数被传递,所以你应该检查:

if len(sys.argv) == 4:

因为有四个参数:

['script.py', arg1, arg2, arg3]

以下是一些有效的代码:

emil ~/test > python script.py arg1 arg2 arg3
arg3
emil ~/test > cat script.py 
import sys
if len(sys.argv) == 4:
    print sys.argv[3] # do something
else:
    print("Please, provide third argument")
emil ~/test > python script.py arg1 arg2
Please, provide third argument

答案 1 :(得分:2)

要访问最后一个元素,请使用sys.argv[-1]。或者sys.argv[2]。列表具有零基指数。因此,对于长度为3的列表,最后一个元素将位于testList[2]

如果要检查是否提供了第三个参数,则需要测试长度为4。

C:\Python27>python scriptName.py 123 456 789
['scriptName.py', '123', '456', '789']

第一个参数是脚本名称,因此如果您需要查看传递了多少其他参数,则需要检查是否len(sys.argv) == 4然后使用sys.argv[-1]访问最后一个元素。

通过测试sys.argv的长度来检查测试程序。

import sys

if len(sys.argv) == 4:
    print "4 arguments were provided. The arguments were :", sys.argv[1:]
elif len(sys.argv) == 3:
    print "3 Arguments were provided. The arguments were :", sys.argv[1:]

输出:

C:\Python27>python scriptName.py 123 456 789
4 arguments were provided. The arguments were : ['123', '456', '789']

C:\Python27>python scriptName.py 123 456
3 Arguments were provided. The arguments were : ['123', '456']

答案 2 :(得分:0)

很简单,sys.argv包含脚本的名称和参数,因此len(sys.argv)将是参数的数量+ 1.所以一个简单的脚本:

import sys
print len(argv)

给出:

$ python script.py
1
$ python script.py arg1 arg2 arg3
4