python - 如何复制bash对作为参数传递给其他命令的命令的转义
问题描述
我将执行命令的结果作为输入传递给 python,如下所示:
$ python parse_ips.py "$(kubectl get configmap ...)"
从命令行执行时效果很好,但是我现在正在尝试使用 PyCharm 编辑文件。因此我需要这个命令结果的转义版本,我可以将它粘贴到 PyCharm 的调试配置中,因为我不能像在命令行上那样实时执行命令。
但是,我正在努力寻找一种在幕后复制转义 bash 的方法,因此我可以将结果用作 PyCharm 配置中的参数。运行上述kubectl
命令会生成一个包含空格和引号的多行字符串。当我将其粘贴到 PyCharm 中时,它只是将其解释为多个参数。我正在寻找转义的结果,我可以将其直接粘贴到命令行中,或者粘贴到 PyCharm 的调试配置中,以使用固定参数来实现相同的结果进行测试。
任何帮助将不胜感激!
编辑:为了澄清,我的意思是在命令行上,当命令的结果$(kubectl ...)
被引号 ( ) 包围时,它作为单个命令行参数传递给 python 程序"$(kubectl ...)"
。所以在 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 ...)"
转换成的内容,以便能够将整个输出作为单个命令行条目传递。
解决方案
我正在努力寻找一种方法来在幕后复制转义 bash
通常用于printf "%q"
逃避东西。
printf "%q" "$(kubectl get configmap ....)"
这printf
就像 bash 内置命令一样。它与 coreutils 不同printf
,最新的也支持%q
不同的引用风格:
/usr/bin/printf "%q" "$(kubectl get configmap ....)"
现代 bash 也有引用扩展:
var="$(kubectl get configmap ....)"
echo "${var@Q}"
还有 . 输出的引用样式set -x
。
我建议使用一个文件:
kubectl get configmap ... > /tmp/tempfile
python parse_ips.py "$(cat /tmp/tempfile)"
您可以将xclip
命令输出直接复制到 X 服务器剪贴板,这很方便:
printf "%q" "$(kubectl get configmap ...)" | xclip -selection clipboard
# then in another window:
python parse_ips.py <right mouse click><select paste>
推荐阅读
- angular - Nativescript (Angular 2) - 在特定组件中隐藏 app.component.html 的一些行
- python-3.x - Python:使用条件和“包含”-语句创建新列
- visual-studio - winforms,创建带有按钮的动态表格布局面板所需的帮助
- azure - 如何解决 Azure 搜索中的性能问题
- php - 最佳实践:如果用户上传密钥文件会(更)安全吗?
- wpf - WPF MediaElement 播放方向
- functional-programming - 返回一个包含 for 循环执行结果的列表
- sql - SQL触发器防止单行删除
- ant - 如何使用 Ivy iBiblio 解析器连接到受 SPNEGO 保护的 Maven 存储库?
- c++ - CRTP 中未实现的派生函数