Python argparse参数:传递包含连字符的字符串的问题

时间:2015-04-27 18:35:50

标签: python shell centos argparse hyphen

今天我的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

1 个答案:

答案 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']