编辑2:有点晚的编辑,以总结对这个问题的评论。我误解了bash的工作原理,并将其与python的工作原理混淆。我假设Bash转义了kubectl
命令的输出,因此在传递给python命令时不会将其分解为多个参数。(即如何在Python字符串中转义引号以防止字符串被分解。
实际上,当命令的输出用引号括起来时,Bash能够将命令执行的输出作为单个参数传递。它不逃避任何东西,它只是不试图解释它的一切。我遇到的问题实际上是PyCharm缺乏将复杂字符串作为单个参数传递的功能,而PyCharm将带有空格的字符串作为多个参数进行解析。
我将命令的执行结果作为输入传递给python,如下所示:
$ python parse_ips.py "$(kubectl get configmap ...)"
从命令行执行时,这工作正常,但我现在尝试使用PyCharm编辑文件。因此,我需要这个命令结果的转义版本,我可以将其粘贴到PyCharm的调试配置中,因为我不能像在命令行上那样实时执行命令。
然而,我正在努力寻找一种方法来在幕后复制转义的bash,这样我就可以在PyCharm配置中使用结果作为参数。运行上面的kubectl
命令会得到一个包含空格和引号的多行字符串。当我把它粘贴到PyCharm中时,它只是把它解释为多个参数。我正在寻找转义的结果,我可以直接将其粘贴到命令行中,或者粘贴到PyCharm的调试配置中,以便使用固定的参数来实现相同的测试结果。
任何帮助将不胜感激!
编辑:澄清一下,我的意思是在命令行上,$(kubectl ...)
命令的结果被引号("$(kubectl ...)"
)括起来时作为单个命令行参数传递到python程序中。因此,在python程序中,您可以访问sys.argv[1]
,它将包含$(kubectl get configmap ...)
的整个执行输出。但是,如果我自己在命令行上执行该命令,结果将是一个多行字符串。
如果我将结果复制到PyCharm中(甚至再次在命令行上),它将被解释为许多命令行参数。例如,它看起来像这样:
$ python parse_ips.py apiVersion: v1
data:
item1: ifconfig-push 127.0.0.0 255.255.0.0
item2: ifconfig-push 127.0.0.1 255.255.0.0
item3: ifconfig-push 127.0.0.2 255.255.0.0
...
等等。这显然和以前的方式不一样了。因此,如果每次不从命令行调用kubectl
,我就无法测试我的程序。我希望复制"$(kubectl ...)"
转换成的内容,以便它能够将整个输出作为单个命令行条目传递。
1条答案
按热度按时间qvtsj1bj1#
我正在努力寻找一种方法来复制逃脱bash做幕后
通常使用
printf "%q"
来转义内容。这是作为bash内置命令的
printf
。它与coreutilsprintf
不同,最新的也支持%q
,但引用方式不同:Modern bash也有引用扩展:
还有
set -x
输出的引用样式。我建议使用一个文件:
使用
xclip
,您可以将命令输出直接复制到X服务器剪贴板,这很方便: