我有一个要求,我必须按照下面的确切顺序将参数传递给 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
代码正在去掉单引号。我怎样才能得到预期的结果?
最佳答案
使用双引号
一种解决方案是在参数周围使用双引号,如下所示:
python script.py -W " code=123 and fruits='Apple' "
并不是 argparser 包剥离了单引号。它是 Python 内置的 sys.argv 对参数的处理,和/或 Python 处理器本身。
Python 需要转义来处理相同类型的引号(单引号或双引号),但您可以嵌套相反类型的原始引号而无需转义字符。如果这违反了要求的规则 - 那么您可能需要使用不同的语言或推迟要求。
<小时/>分析
您可以通过直接查看 sys.argv 输出来测试这一点。
sysargtest.py:
import sys
for arg in sys.argv:
print('"{}"'.format(arg))
如果我输入python sysargtest.py -W ' code=123 andfruits='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' "]
关于python - 需要使用 argparse 传递带单引号的字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58364736/