在 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
。
我正在尝试处理作为命令行参数的 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
。