【发布时间】: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