我有一个要求,我必须按照以下确切顺序将参数传递给python脚本。 我无法更改脚本的调用方式。
py_script.py -W ' code=123 and fruits='Apple' '
-W
参数在单引号内为string
。字符串反过来包含一个单引号(fruits = {'Apple'
)
我正在使用argparse
来处理
代码:
import argparse
parser = argparse.ArgumentParser(description="abc")
parser.add_argument('-W', '--filt', metavar='', help="Filter Condition", nargs='+')
args = parser.parse_args()
arg_str = ' '.join(args.filt)
print(args.arg_str)
预期结果:
code=123 and fruits='Apple'
实际结果:
code=123 and fruits=Apple
该代码去除了单引号。我如何获得预期的结果?
答案 0 :(得分:1)
一种解决方案是在参数周围使用双引号,例如:
python script.py -W " code=123 and fruits='Apple' "
不是argparser软件包删除了单引号。它是Python对参数和/或Python处理器本身的内置sys.argv处理。
Python需要使用转义符来处理相同类型的引号(单引号或双引号),但是您可以嵌套相反类型的原始引号,而无需使用转义符。如果这违反了要求的规则-那么您可能需要使用其他语言或将要求回推。
您可以通过直接查看sys.argv输出进行测试。
sysargtest.py:
import sys
for arg in sys.argv:
print('"{}"'.format(arg))
如果我输入python sysargtest.py -W ' code=123 and fruits='Apple' '
结果是:
$ py sysargtest.py -W ' code=123 and fruits='Apple' '
"sysargtest.py"
"-W"
" code=123 and fruits=Apple "
去除了单引号。解决此问题的一种方法是在命令行中使用双引号而不是单引号,如果这不是您的要求之一:
$ py sysargtest.py -W " code=123 and fruits='Apple' "
"sysargtest.py"
"-W"
" code=123 and fruits='Apple' "
通过该更改,argparse将在原始脚本上运行:
$ py script.py -W " code=123 and fruits='Apple' "
[" code=123 and fruits='Apple' "]