今天我在python代码中遇到了一个奇怪的行为。我写了下面的小程序来说明。
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))
我在第一台服务器上运行了代码,得到了预期的结果(list 1包含一个包含“-V”的字符串)。
$ 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
我在第二个服务器(Centos 6.6)上运行它,得到了一个错误。连字符似乎被认为是附加参数的一部分,尽管-l1的值仍然用双引号括起来...任何想法都将非常感激...
$ uname -a
Linux sacapus 2.6.32-504.12.2.el6.x86_64 #1 SMP Wed Mar 11 22:03:14 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
$ python --version
Python 2.7.9
$ 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"
usage: test.py [-h] [--list1 THE_LIST]
test.py: error: unrecognized arguments: -V def
1条答案
按热度按时间piwo6bdm1#
这真的不应该发生。为了弄清楚发生了什么,我会包括
在脚本的开头,以确定shell是否确实将
"abc -V def"
字符串作为单个参数传递。如果它以单个参数的形式出现在你的程序中,那就归咎于
argparse
,否则你的shell就乱了套。不管怎样,这看起来应该成为CentOS bug数据库中的一个条目。FWIW,我不能在Debian杰西上用Python 2.7.9重现这个: