【问题标题】:Is there a way to pass in a str argument containing "$" character? [duplicate]有没有办法传入包含“$”字符的 str 参数? [复制]
【发布时间】:2021-11-15 05:21:49
【问题描述】:

我的 python 脚本需要一个 str 类型的参数。

我正在使用来自argparseArgumentParser 类。

我想传入一个中间包含“$”字符的字符串,例如"file$102_a.txt",但是当传递给脚本时,参数存储为"file",切断了 $102_a。

有什么方法可以让argparse 适应这种情况吗?

运行 macOS,python v3.7.6

感谢您的帮助。

【问题讨论】:

  • 你是如何运行脚本的?这可能是你的 shell 做的,而不是 Python 中的任何东西。您确定参数存储为"file" 而不是"file.txt"
  • shell 实际上应该只将$1 扩展为空字符串; 102_a 不是有效标识符,多位位置参数需要大括号来分隔名称,即${102}
  • @chepner 在 zsh 上,echo "file$102_a.txt" 产生 file_a.txt,在鱼壳中,它产生 file.txt
  • @smac89 是的,这是zsh 的非标准功能。 POSIX 要求多位参数用大括号括起来。 (虽然我认为 zsh 这样做是完全合理的,而且 POSIX 要求可能更多地源于历史先例和现有行为。)
  • zsh 是一个在您的终端中运行 的 shell,无论您使用的是终端还是 iTerm。

标签: python string argparse


【解决方案1】:

我们可以在美元符号前加上escape sequence

说 test.py 被定义为

import sys
print(sys.argv[1])

那么,

$ python test.py "dff\$sdfs"

将打印dff$sdfs

编辑:正如用户:smac89 所指出的,如果参数用单引号 (') 括起来,而不是双引号 ("),则它不会在美元符号处拆分。

$ python test.py 'dff$sdfs'

也会打印dff$sdfs

【讨论】:

  • 值得指出的是,这与argparse或Python无关,而是shell的一个特性。
  • 谢谢。虽然这确实如您所说,但我希望找到一个不涉及重新配置参数的解决方案。我有数千个文件和一个 csv 文件,其中包含所有名称和其他元数据。也就是说,如果归根结底,这很可能是我最终会做的事情
  • @amc007 你不必这样做。查看重复链接,您会发现解决此问题的另一种方法是仅从 shell 中“单”引用参数,而不是双引号
  • @smac89,谢谢!这正是我正在寻找的解决方案。
猜你喜欢
  • 2016-10-13
  • 2017-11-30
  • 2011-10-16
  • 2012-02-25
  • 2013-09-20
  • 2011-06-12
  • 2022-11-03
  • 2011-06-27
  • 2021-06-01
相关资源
最近更新 更多