python sys.argv无法获取参数值?

时间:2012-11-23 00:17:44

标签: python python-3.x python-2.7

我试图将一些变量传递给我的python代码。在运行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])

3 个答案:

答案 0 :(得分:1)

请记住,python中的列表从0开始。

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

所以当你的长度为1时,你只有1个元素(argv [0]),这意味着argv [1]不存在。

答案 1 :(得分:0)

哥们,

当你的长度为1时,你正在阅读argv [[1]。如何长度数组有两个项目(读取第0和第1项)。

答案 2 :(得分: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