采取以下脚本
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
答案 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\""