python - 需要使用 argparse 传递带单引号的字符串参数
问题描述
我有一个要求,我必须按照下面的确切顺序将参数传递给 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 输出来测试它。
系统参数测试.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' "]
推荐阅读
- geolocation - 在 NativeScript 应用程序中获取额外的地理位置数据 (GnssStatus)
- html - 如何将子文本元素与输入文本元素的底部对齐
- javascript - 将元素添加到已评估的循环中
- javascript - Javascript 正则表达式延迟量词未按预期工作
- c# - 转动时倾斜第一人称相机的 z 轴
- bash - 替换多个文件中特定行上的非字母数字字符
- sql - SQL - 查找没有阴影的产品 ID,其中包含作为产品 ID 的子字符串
- java - Spring缓存为项目类抛出意外错误
- excel - 生成新工作表时自动使用参考表列中的下一行值
- c++ - c++ 中结构内部的 unordered_map 会导致内存泄漏问题吗?