【问题标题】:python - Pycharm ignores triple quotes around parameterpython - Pycharm 忽略参数周围的三引号
【发布时间】:2018-03-24 22:37:38
【问题描述】:

获取以下脚本

import sys
for i in sys.argv:
    print(i)

我需要sys.argv 来包含参数周围的引号。为此,当我在 Windows cmd 上执行此操作时,我会这样做

python temp.py p1 p2 """p3"""

现在奇怪的是:

cmd 中的输出是

p1 p2 "p3"

这是正确的。

但是当我在 Pycharm 中执行它时,用 p1 p2 """p3""" 填充 Script Parameterssys.argv[3]p3 周围没有引号,并且控制台输出(在 Pycharm 内)也没有在 p3 周围的引号

p1 p2 p3

如何让 Pycharm 尊重参数周围的三引号?

PyCharm Community Edition 2017.2.3
Build #PC-172.3968.37, built on September 1, 2017
JRE: 1.8.0_152-release-915-b11 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
Windows 10 10.0

【问题讨论】:

  • 用反斜杠转义引号
  • @DmitryB。谢谢。
  • 我仍然认为他们应该保留 cmd.exe python 的行为,因为这就是 Script Parameters 的目的。
  • cmd.exe 行为是特定于 Windows 的。由于 PyCharm 在多个平台上运行,因此仅模拟其中一个平台的行为是没有意义的。
  • @DmitryB。脚本参数的重点是如果您要在命令行上运行它并传递这些参数会怎样所以遵循与 Pycharm 当前正在运行的平台命令行相同的行为是有意义的开。

标签: python cmd pycharm


【解决方案1】:

这不是字面上的 PyCharm 问题。这正是所有使用 sh、bash 等类似 Linux 的系统的行为。

要在此处添加双引号,您必须使用单引号转义它们中的每一个:

python temp.py p1 p2 '"'p3'"'

如果你需要传递单引号,你可以用双引号转义它们:

python temp.py p1 p2 "'"p3"'"

如果 p3 本身可以包含空格或特殊字符,您还必须使用单引号或双引号对其进行转义:

python temp.py p1 p2 "'""p3""'"
python temp.py p1 p2 "'"'p3'"'"

为了更清楚起见,我会加上大括号,尽管这样不起作用:

python temp.py p1 p2 ("'")("p3")("'")
python temp.py p1 p2 ("'")('p3')("'")

UPD:我错了。 PyCharm 不像在 shell 中那样遵循通常的脚本参数转义:既不是 cmd.exe,也不是 bash。它有自己的规则。根据official documentation,你必须使用\"

  • 使用空格分隔各个脚本参数。
  • 包含空格的脚本参数应使用双引号分隔,例如 some" "param 或 "some param"。
  • 如果脚本参数包含双引号,用反斜杠转义双引号,例如: -s"main.snap_source_dirs=[\"pcomponents/src/main/python\"]" -s"http.cc_port=8189" -s"backdoor.port=9189"

原来是这样:

python temp.py p1 p2 "\"p3\""

【讨论】:

  • 脚本参数的全部意义在于如果您要在命令行上运行它并传递这些参数会怎样所以遵循与命令相同的行为确实有意义Pycharm 目前正在运行的平台的行
  • @Adrian 你是对的也是错的。正确,因为 PyCharm 不遵循 bash 的转义约定。错了,因为 PyCharm 也不遵循平台的约定,但有自己的——我已将官方文档的链接添加到答案中。
猜你喜欢
  • 1970-01-01
  • 2018-08-03
  • 2011-10-15
  • 1970-01-01
  • 1970-01-01
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 2012-04-22
相关资源
最近更新 更多