2013-08-20 89 views
-1

我運行腳本:python script.py arg1 arg2,但是我想要這樣做,如果提供了arg3然後執行某些操作。目前的代碼看起來像這樣,但不起作用。Python:如果最後一個sys.argv爲空,則跳過

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

我相信這是因爲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 
+0

它絕對不能工作 –

+0

我需要檢查是否提供了arg3,如果沒有 - 打印消息,是的 - 做什麼。 –

+0

@JohnAmraph檢查我發佈的工作代碼。 –

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'] 
+0

最後一個參數不存在,如果它提供的,或腳本應該檢查不如果是 - 做smthing,沒有 - 跳過或打印消息。 –

+0

所以,你想檢查是否提供了第三個參數? –

+0

是的,你提供的邏輯不起作用 –

0

很簡單,sys.argv包含腳本和參數的名字,所以len(sys.argv)會的論點+ 1,所以一個簡單的腳本數:

import sys 
print len(argv) 

得出:

$ python script.py 
1 
$ python script.py arg1 arg2 arg3 
4 
相關問題