我运行脚本: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下测试过。)
答案 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