我想用Python编写一个程序,获取未指定数量和类型的参数。我可以使用
argparse
执行此操作,如下所示:
parser = argparse.ArgumentParser()
parser.add_argument('args', help='Help', nargs=argparse.REMAINDER)
但是这段代码的问题是,当我给它这些参数时,例如:
"Hello" -s "5" 98.5 --file True
,它给我这个输出:['Hello', '-s', '5', '98.5', '--file', 'True']
。它将所有值转换为字符串,并删除字符串值的“符号。我需要这个输出:['"Hello"', '-s', '"5"', '98.5', '--file', 'True']
,将所有值连接在一起并获得与用户输入的输入完全相同的字符串: '"Hello" -s "5" 98.5 --file True'
我尝试使用
shlex.join
和 shlex.quote
,但是这个库并不总是能正常工作,如果用户输入了一个字符串形式的数字,则无法用此方法识别,如上面的示例。
sys.argv
的工作方式类似,但不接受 " 符号。
如果是使用argparse
以外的方法,请告诉我。
这不是 Python 问题。那就是壳的问题了Shell 在将其传递给 Python 之前“删除”引号。您有两个选择:
./script.py '"Hello"' -s '"5"' 98.5 --file True
或
./script.py \"Hello\" -s \"5\" 98.5 --file True
Python 方面你无能为力。