python - Pycharm忽略参数周围的三重引号

时间:2017-10-12 21:09:58

标签: python cmd pycharm

采取以下脚本

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

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

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

现在这里有一个奇怪的事情:

cmd中的输出是

  

p1 p2" p3"

这是正确的。

但是当我在Pycharm中执行它时,用Script Parameters填充p1 p2 """p3"""sys.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

1 个答案:

答案 0 :(得分:2)

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

要在那里添加doule-quotes,你必须使用单引号转义每个引号:

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。它有自己的规则。根据{{​​3}},您必须使用\"

  
      
  • 使用空格分隔各个脚本参数。
  •   
  • 包含空格的脚本参数应使用双引号分隔,例如,某些" " param或"一些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\""