2016-12-02 65 views
0

我发现argparse在参数前添加了额外的空间。基于下面Python 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']不会引起这样的加(从https://stackoverflow.com/a/36376287/2101864激励)。

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

+0

谢谢@aneroid您的详细说明。 –

回答

2

如果您直接执行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 可能不会被扫描每个ARG在sys.argv,查找所有参数名称模式,-s--search。一旦找到,之后的所有内容都是参数值。 -s=/Users/user/Desktop/test中的=是标准的arg=value表示法(过去更是如此),所以它将它解释为参数与其值之间的分隔符。