2012-11-23 56 views
0

我試圖將一些變量傳遞給我的Python代碼。該變量是一個列表,我運行python腳本後。這只是打印出sys.argv。輸出如下:python sys.argv無法獲取參數值?

:~ xxx$ /var/folders/kg/qxxxxxd343433gq/T/Cleanup\ At\ Startup/pdTry-375321896.860.py.command ; exit; 
var1, var2, var1, var2 
the len argv is 1 
/Users/xxx/python/pdTry.py 
Traceback (most recent call last): 
File "/Users/xxx/python/pdTry.py", line 58, in <module> 
main() 
File "/Users/xxx/python/pdTry.py", line 33, in main 
print (sys.argv[1]) 
IndexError: list index out of range 
logout 

你可以看到列表包含var1和var2實際打印出來2次。但我可以得到的值,len sys.argv是1.沒有值爲sys.argv [1]。有誰知道爲什麼?爲什麼長度是1,應該是2? arg [0]是腳本名稱,arg [1]是我傳遞給它的變量列表?

的代碼只是

def main(): 
    os.system ('osascript up.scpt') 
    #print (sys.argv) 
    a= 'the len is '+str(len(sys.argv)) 
    print (a) 
    print (sys.argv[0]) 
    print (sys.argv[1]) 
+1

您沒有添加任何參數,這就是爲什麼len是1,但在另一方面,沒有人能夠理解您發佈的內容。收拾起來,放下不相關的部分。 –

+0

參數從我打電話的applesciprt傳遞.... –

回答

0

哥們,

你正在閱讀的argv [1]當你的長度爲1長度的數組怎麼能有兩個項目(閱讀0級和1項) 。

+0

雖然我正在閱讀0和1。 sys.argv [0]是腳本名稱本身,我的問題實際上是爲什麼長度是1.它應該是2,正確的,如果你看看我的輸出。 –

+1

你可以發佈你如何從命令行調用。這不是很清楚。 – Mayank

+0

我有一個名爲applescript的python,它在一個主函數中,然後我只運行python腳本。 –

1

記住,在0

List Length : 1 2 3 4 
Element number: 0 1 2 3 
Data   : A B C D 

在python開始列表,以便當有長度爲1只有1個元件(的argv [0]),這意味着的argv [1]不存在。

0

看來你遺漏了任何真正的論據,腳本,它可以被添加到sys.argv列表。在您發佈的調用中,我看不到傳遞給腳本的變量列表。如果分隔命令(腳本名稱和退出shell內置)的分號已被轉義,那麼很可能你會將len(sys.argv)等於3(但我懷疑你最初的意圖是將分號並退出爲sys .argv值)。

# simple test script 
$ cat exittest.py 
import sys 
print(sys.argv, len(sys.argv)) 

# and some calls 
$ python3.2 exittest.py 
['exittest.py'] 1 

$ python3.2 exittest.py \; exit 
['exittest.py', ';', 'exit'] 3 

# and for a similar call as you posted I ssh'ed to my localhost 
# to test it with exit builtin 
$ python3.2 exittest.py ; exit 
['exittest.py'] 1