centos Python参数解析参数:传递包含连字符的字符串的问题

bt1cpqcv  于 2022-11-07  发布在  Python
关注(0)|答案(1)|浏览(172)

今天我在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
piwo6bdm

piwo6bdm1#

这真的不应该发生。为了弄清楚发生了什么,我会包括

print(repr(sys.argv))

在脚本的开头,以确定shell是否确实将"abc -V def"字符串作为单个参数传递。
如果它以单个参数的形式出现在你的程序中,那就归咎于argparse,否则你的shell就乱了套。不管怎样,这看起来应该成为CentOS bug数据库中的一个条目。
FWIW,我不能在Debian杰西上用Python 2.7.9重现这个:

greek0@orest:/tmp$ python2.7 a.py -l1 "abc -V def"
list1:['abc -V def']

相关问题