Python argparse 参数 : issue with passing strings containing hyphens

标签 python shell centos argparse

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

我在第一台服务器上运行代码。我得到了预期的行为(list1 包含一个包含“-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

最佳答案

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

print(repr(sys.argv))

在脚本的开头,以隔离 "abc -V def" 字符串是否真的作为单个参数由 shell 传递。

如果它作为单个参数出现在您的程序中,请怪罪 argparse,否则您的 shell 就会出错。无论哪种方式,这似乎都应该成为 CentOS 错误数据库中的一个条目。

FWIW,我无法使用 Python 2.7.9 在 Debian Jessie 上重现此内容:

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

关于Python argparse 参数 : issue with passing strings containing hyphens,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29903449/

相关文章:

python - 在不同的列中删除无序的重复项

linux - 字体的终端转义序列

ruby-on-rails - 您的 PostgreSQL 太旧 - centos 6.5 服务器上的错误

django - 如何设置 uWSGI vassal 名称以获得更好的日志引用?

python - 如何加快url生成速度?

python - 古腾堡项目 Python 问题?

python - 出现错误 : TemplateAssertionError: no filter named 'n' when printing report?

bash - cut -f 参数无法正常工作

linux - 在命令行中同时执行两个命令

docker - 如何使用 docker 驱动程序访问 Minikube 中的 NodePort?