忽略python中的空间argparse

时间:2016-04-03 09:05:06

标签: 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']}

我可以知道如何传递正确的参数

3 个答案:

答案 0 :(得分:2)

这不是一个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']}

答案 1 :(得分:1)

用引号

围绕参数
  

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"

答案 2 :(得分:1)

用单引号或双引号括起参数:

$ 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'