0

我试图将一些变量传递给我的 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])
4

3 回答 3

2

请记住,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] 不存在。

于 2012-11-23T00:28:37.173 回答
0

老兄,

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

于 2012-11-23T00:20:40.467 回答
0

您似乎遗漏了脚本的任何实际参数,这些参数可以添加到 sys.argv 列表中。在您发布的调用中,我没有看到传递给脚本的变量列表。如果分隔命令(脚本名称和 exit 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
于 2012-11-23T08:33:09.983 回答