在 python 中提供引号作为输入命令行

Provide quotes as input command line in python

我正在尝试处理作为命令行参数的 Python 脚本中的输入字符串。此输入也可能包含引号(单引号和双引号都可以),我无法将其作为输入提供。我尝试转义它(使用 \),但不起作用。

详情如下:

python3 code.py --foo="foo"  //works
python3 code.py --foo='foo'  //works
python3 code.py --foo='f"o"o'  //works
python3 code.py --foo="fo'o'"  //works
python3 code.py --foo="fo\"o"  //does not work
python3 code.py --foo='fo\'o'  //does not work

对于我的用例,也可能混合使用单引号或双引号。有解决方法吗?

如果重要,这里是相关代码:

import argparse

parser = argparse.ArgumentParser(description="Demo")
parser.add_argument("--foo", required=True)
args = parser.parse_args()
print(args.foo)

这是我尝试 运行 使用“不起作用”的输入时发生的情况:

$ python3 code.py --foo='v\'1'
> ^C

我得到一个“提示”,然后我按 ctrl-C 退出。基本上,\ 不会转义(中间)引号,并且 bash 将我的命令标识为不完整。

在 unix shell 中,要轻松找出您需要发送到任何命令行参数的确切字符串,您可以使用 Python 的 shlex.quote():

>>> import shlex
>>> arg = r'''"fo\"o"'''
>>> print(shlex.quote(arg))
'"fo\"o"'

确保用 r 和三引号将参数括起来。

如果您的字符串中恰好有三重引号,您将不得不手动转义所有内容,而无需使用 r