今天我的python代码遇到了一个奇怪的行为。我写了以下小程序来说明。
for(Object im:list){
Object[] a=(Object[]) im;
System.out.println("subject ="+a[0]+"total questions ="+a[1]);
}
我在第一台服务器上运行了代码。我得到了预期的行为(list1包含一个包含' -V'的字符串。)
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--list1", "-l1", nargs='+', help="liste 1", metavar="THE_LIST")
args = parser.parse_args()
if args.list1:
print("list1:" + str(args.list1))
我在第二台服务器(Centos 6.6)上运行它并收到错误。连字符似乎被视为附加参数的一部分,尽管-l1的值仍然用双引号括起来...任何想法都会非常感激......
$ uname -a
Linux computer 3.2.0-23-generic #36-Ubuntu SMP Tue Apr 10 20:39:51 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
$ python --version
Python 2.7.3
$ cat test.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--list1", "-l1", help="liste 1", metavar="THE_LIST")
args = parser.parse_args()
if args.list1:
print("list1:" + str(args.list1))
$ python test.py -l1 "abc -V def"
list1:abc -V def
答案 0 :(得分:1)
这真的不应该发生。为了弄清楚发生了什么,我会包括
print(repr(sys.argv))
在脚本的开头,用于隔离"abc -V def"
字符串是否真的被shell作为单个参数传递。
如果它作为单个参数归咎于您的程序,则归咎于argparse
,否则您的shell会搞乱。无论哪种方式,这似乎应该成为CentOS的bug数据库中的一个条目。
FWIW,我无法使用Python 2.7.9在Debian Jessie上重现这一点:
greek0@orest:/tmp$ python2.7 a.py -l1 "abc -V def"
list1:['abc -V def']