Python 如何复制bash';s在作为参数传递给其他命令的命令上转义
我将命令执行的结果作为输入传递给python,如下所示:Python 如何复制bash';s在作为参数传递给其他命令的命令上转义,python,bash,pycharm,escaping,Python,Bash,Pycharm,Escaping,我将命令执行的结果作为输入传递给python,如下所示: $python parse_ips.py“$(kubectl get configmap…) 当从命令行执行时,这可以很好地工作,但是我现在尝试使用PyCharm编辑文件。因此,我需要该命令结果的转义版本,我可以将其粘贴到PyCharm的调试配置中,因为我不能像在命令行上那样实时执行该命令 但是,我正在努力寻找一种方法来复制bash在幕后所做的转义,以便在PyCharm配置中使用结果作为参数。运行上述kubectl命令将生成一个多行字符
$python parse_ips.py“$(kubectl get configmap…)
当从命令行执行时,这可以很好地工作,但是我现在尝试使用PyCharm编辑文件。因此,我需要该命令结果的转义版本,我可以将其粘贴到PyCharm的调试配置中,因为我不能像在命令行上那样实时执行该命令
但是,我正在努力寻找一种方法来复制bash在幕后所做的转义,以便在PyCharm配置中使用结果作为参数。运行上述kubectl
命令将生成一个多行字符串,其中包含空格和引号。当我将其粘贴到PyCharm中时,它只是将其解释为多个参数。我正在寻找转义结果,我可以将其直接粘贴到命令行或PyCharm的调试配置中,以使用固定的测试参数获得相同的结果
任何帮助都将不胜感激
编辑:澄清一下,我的意思是在命令行上,当python程序被引号(“$(kubectl…)
)包围时,$(kubectl…
)命令的结果作为单个命令行参数传递到python程序中。因此,在python程序中,您可以访问sys.argv[1],它将包含$(kubectl get configmap…)的整个执行输出。但是,如果我自己在命令行上执行该命令,结果将是一个多行字符串
如果我随后将结果复制到PyCharm中(甚至再次在命令行上),它将被解释为许多命令行参数。例如,它看起来像这样:
$python parse_ips.py apiVersion:v1
数据:
项目1:ifconfig推送127.0.0.0 255.255.0.0
项目2:ifconfig推送127.0.0.1 255.255.0.0
项目3:ifconfig推送127.0.0.2 255.255.0.0
...
等等。这显然不像以前那样有效。因此,如果每次都不从命令行调用kubectl
,我就无法测试我的程序。我希望复制“$(kubectl…”
转换成的内容,以便它能够作为单个命令行条目传递整个输出
我正在努力寻找一种方法来复制bash在幕后所做的越狱行为
通常使用printf“%q”
来转义内容
printf "%q" "$(kubectl get configmap ....)"
这是作为bash内置命令的printf
。它不同于coreutilsprintf
,最新版本还支持不同报价风格的%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>
printf“%q”“$(kubectl获取配置映射…)| xclip-选择剪贴板
#然后在另一个窗口中:
python parse_ips.py
你能澄清一下你的意思吗?显示的代码中没有转义,Python通常比bash需要更少的转义。我猜您正在寻找PYCHARM\u ARGS=“\”$(kubectl get configmap…)\”
?嘿,伙计们,很抱歉搞混了!我用一个编辑更新了这个问题,这澄清了吗?场景在某处,bash获取$(kubectl get configmap…)的输出并执行必要的转义
否。没有“转义”。Bash按原样传递命令的输出,不做任何修改(ok,除了,$(..)
删除尾随的空行)。你想做什么?是否要用鼠标复制命令的输出,并将其作为一个参数粘贴到另一个终端?例如,为什么不使用文件?Bash不“阻止”,如果扩展不在双引号内,则是Bash将扩展结果拆分为多个参数。是bash进行了拆分。如果参数在双引号内,则不会执行分词(和文件名扩展)。嘿,谢谢你,这太棒了!不知道printf
和xclip
也很有用。这在命令行上非常有效,并且符合预期!不幸的是,将其作为参数粘贴到PyCharm调试配置中是不起作用的,它会在空格上分割结果,但根据前面的解释,这可能是PyCharm的问题,而不是bash的问题。谢谢你的帮助!当我找到更多的时间时,我会抽出时间用你们所有的有用信息来更新我的问题:)就像PyCharm做的一样,而不是bash阻止的那样。