Python argparse在参数前添加额外的空间

Python argparse在参数前添加额外的空间,python,command-line,arguments,Python,Command Line,Arguments,我发现argparse在参数前添加了一个额外的空格。基于下面的示例代码 def parse_arguments(): parser = argparse.ArgumentParser( prog='sample', description='bla bla', parser.add_argument('-s', '--search', dest='pattern', required=True, help='search path pattern (e.g

我发现argparse在参数前添加了一个额外的空格。基于下面的示例代码

def parse_arguments():
    parser = argparse.ArgumentParser(
    prog='sample',
    description='bla bla',
    parser.add_argument('-s', '--search', dest='pattern', required=True,
    help='search path pattern (e.g. /dir1/dir2/*.ext)')

    args = parser.parse_args()

    if args.pattern[0] == ' ':
        print "One space is added to the argument"
    return args
并在交互式shell中进行测试,具体如下:

import sys
sys.argv = ['', '-s /Users/user/Desktop/test']
execfile('test.py')
将参数提供为
sys.argv=['',-s=/Users/user/Desktop/test']
不会导致这样的添加(来自)


这是记录在案的行为还是我错过了什么?因为普通用户通常会在参数标记和值之间添加一个空格来提供参数。

如果直接执行
test.py
,则不会出现额外的空格。这在交互式shell中发生,因为在执行
test.py
之前,您将
sys.argv
设置为

sys.argv = ['', '-s /Users/user/Desktop/test']
但是当从终端运行脚本并检查
sys.argv
时,您会得到:

['test.py', '-s', '/Users/user/Desktop/test']
从终端运行时,它还忽略
-s
和值之间的多个空格

shell/terminal已经将每个参数分别提供给脚本(Python将它们放入一个列表中)。因此,第二个参数仅为
-s
,而不是
-s/Users/user/Desktop/test
。在交互式shell中执行
sys.argv=['''-s','/Users/user/Desktop/test']
可以得到正确的结果


argparse可能会扫描
sys.argv
中的每个arg,并查找所有参数名模式、
-s
-search
。一旦找到,之后的所有内容都是参数值。
-s=/Users/user/Desktop/test
中的
=
是标准的
arg=value
符号(过去更是如此),因此它将其解释为参数与其值之间的分隔符。

感谢@aneroid的详细说明。