python - 忽略 python argparse 中的空间

标签 python

对于下面的代码,

import os
import shutil
import argparse

if __name__ == '__main__':
    ap = argparse.ArgumentParser(description="Test")
    ap.add_argument('-s', '--values', action="store", dest="values", nargs='+', type=str)
    args = vars(ap.parse_args())
    print args

这段代码的输入是

$python test.py -s 90030#95000#m#6099#bc 90031#95001#s#1#+100ABC 90032#95002#s#2#+200ABC 90033#95003#s#3#+300 ABC

实际输出为

{'values': ['90030#95000#m#6099#base_case', '90031#95001#s#1#+100ABC', '90032#95002#s#2#+200ABC', '90033#95003#s#3#+300', 'ABC']}

但是,我需要通过忽略第三个参数中的空格来输出如下内容。

{'values': ['90030#95000#m#6099#base_case', '90031#95001#s#1#+100ABC', '90032#95002#s#2#+200ABC', '90033#95003#s#3#+300 ABC']}

请问如何传递正确的参数

最佳答案

这不是 argparse 问题。这是一个shell 问题。您的 shell 解析出参数并将它们作为数组传递给 Python。

通过在构成一个参数的那些部分加上引号告诉 shell 不解析字符串:

$ python test.py -s 90030#95000#m#6099#bc 90031#95001#s#1#+100ABC \
    90032#95002#s#2#+200ABC "90033#95003#s#3#+300 ABC"

注意 "90033#95003#s#3#+300 ABC" 作为最后一个参数。

您还可以使用反斜杠来转义空格:

$ python test.py -s 90030#95000#m#6099#bc 90031#95001#s#1#+100ABC \
    90032#95002#s#2#+200ABC 90033#95003#s#3#+300\ ABC

使用 csh 和您的示例代码进行演示:

% python test.py -s a b c
{'values': ['a', 'b', 'c']}
% python test.py -s a "b c"
{'values': ['a', 'b c']}
% python test.py -s 90030#95000#m#6099#bc 90031#95001#s#1#+100ABC 90032#95002#s#2#+200ABC 90033#95003#s#3#+300\ ABC
{'values': ['90030#95000#m#6099#bc', '90031#95001#s#1#+100ABC', '90032#95002#s#2#+200ABC', '90033#95003#s#3#+300 ABC']}

关于python - 忽略 python argparse 中的空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36383528/

相关文章:

python - Flask-Bcrypt - 属性错误 : 'module' object has no attribute 'ffi' - deployed to AWS Beanstalk

python - 将函数转换为列表

python - 是否可以使用 squish 对 QML 进行自动化测试?

python - 为什么我的感知器不能完美地分离数量少于特征数量的点?

python - Python的单元测试可以像 Nose 一样并行吗?

python - Django 清除所有管理员列表过滤器

python - 围绕外部数据构建对象模型

python - 导入错误: DLL load failed: %1 is not a valid Win32 application

python - TypeError:迭代 0-d 数组 Python

python - 获取 Django 模型字段的 Python 类型?