【问题标题】:Provide quotes as input command line in python [duplicate]在python中提供引号作为输入命令行[重复]
【发布时间】:2022-01-21 21:17:53
【问题描述】:

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

【问题讨论】:

  • windows 还是 unix?
  • Linux,确切地说是 ubuntu-20.04。
  • 所有示例的行为都完全符合我的预期。这只是我生命中的两分钟,但仍然,我永远不会让他们回来。同样,问题似乎纯粹是您期望的东西与您应该的不同。现有的关于 shell 引用如何工作的常见问题解答是解决方案。您标记为“不起作用”的倒数第二个示例按预期生成 fo"o
  • @Bharel 重新打开您已发布答案的问题有点可疑。这里有几位评论者同意这是关于 shell 引用的基本常见问题解答,应该作为副本关闭。
  • @triplee 已关闭。我仍然认为应该有一个更好的重复目标,类似于通常转义 shell 参数。

标签: python python-3.x sh command-line-arguments


【解决方案1】:

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

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

确保使用 r 和三引号括住参数。

如果您的字符串中恰好有三引号,则必须手动转义所有内容,而不使用 r

【讨论】:

  • 我不明白这与我的用例有什么关系。请详细说明....我只想将通用字符串作为命令行参数传递给脚本,并且该字符串包含空格、spl 字符、引号等。
  • 这向您展示了如何将要从 shell 传递给 Python 的字符串转义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-20
  • 2018-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-12
  • 1970-01-01
相关资源
最近更新 更多