采用以下脚本
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"""
, sys.argv[3]
填充 脚本参数
code> 在 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
最佳答案
这并不是字面上的 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 ,您必须使用 \"
:
- Use spaces to separate individual script parameters.
- Script parameters containing spaces should be delimited with double quotes, for example, some" "param or "some param".
- If script parameter includes double quotes, escape the double quotes with backslashes, for example:
-s"main.snap_source_dirs=[\"pcomponents/src/main/python\"]" -s"http.cc_port=8189" -s"backdoor.port=9189"
所以会是:
python temp.py p1 p2 "\"p3\""
关于python - Pycharm 忽略参数周围的三引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46718951/