如何将包含空格或引号的脚本参数传递给PyCharm?

时间:2015-07-13 22:18:47

标签: python intellij-idea

我可以运行(对于命令行)

myscript.py '--pm execute.shell(cmd="ls -l", nonInteractive=True)'

但是,假设我要调试myscript.py并将Edit Configurations Python对话框中的“Script parameters:”字段设置为:

--pm execute.shell(cmd="ls -l", nonInteractive=True)

它在“ls”和“-l”之间的空间处的barfs。有办法解决这个问题吗?使用“或”引号似乎不会这样做:

--pm 'execute.shell(cmd="ls -l", nonInteractive=True)'
--pm "execute.shell(cmd='ls -l', nonInteractive=True)"

在这两种情况下,引号都以参数结束。

更新: 运行:

import sys
for x in sys.argv:
    print "<%s>"%(x,)

Script parameters: a  \ b " c" "\ d" ' e' '\ f' "a 'b' \"c\""

给出:

<cmd.py>
<a>
<\>
<b>
< c>
<\ d>
<'>
<e'>
<'\>
<f'>
<a 'b' "c">

所以看起来像:

  • 忽略转义(\字面处理),除了前面的“
  • 非转义“启动可能包含空格的块
  • '按字面意思处理

所以,神奇的答案是:

Script parameters:  --pm "execute.shell(cmd='ls -l', nonInteractive=True)"

Script parameters:  --pm "execute.shell(cmd=\"ls -l\", nonInteractive=True)"

1 个答案:

答案 0 :(得分:1)

我对这个问题不是100%肯定。由于我没有评论特权,我将其作为答案撰写。

改变&#34; ls -l&#34;到&#34; ls- \ l&#34;应该工作,至少在* nix系统上。

相关文档/错误报告位于https://youtrack.jetbrains.com/issue/PY-4715https://youtrack.jetbrains.com/issue/IDEA-72632,表明您需要使用系统相关方法转义空格,而不是使用通用方法。关于通用系统无关方法的提议显然被否定了。

编辑: - pm&#34; &#34; execute.shell(cmd = \&#34; ls&#34;&#34; -l \&#34;,&#34;&#34; nonInteractive = True)有效。