python - 需要使用 argparse 传递带单引号的字符串参数

标签 python python-3.x arguments

我有一个要求,我必须按照下面的确切顺序将参数传递给 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/

相关文章:

python - 如何使用 python-docx 正确缩进?

python - 返回对象指针 : 'Cannot convert ' Coordinate *' to Python object'

python - For 循环在带有 csv 文件的 python 中不起作用

Python 命令行参数 linux

javascript - 在 JavaScript 中混合命名和未命名参数?

python - 强制多处理池迭代参数

django - 创建继承自 APIView 的自定义抽象 View 类

python - TypeError : write() argument must be str, 不是字节(Python 3 与 Python 2)

python - pyinstaller kivy错误无法获取任何图像提供程序,中止

javascript - 检查数组是否是数组,但考虑参数对象