Python argparse在参数前添加额外的空间
我发现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
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的详细说明。