Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何复制bash';s在作为参数传递给其他命令的命令上转义_Python_Bash_Pycharm_Escaping - Fatal编程技术网

Python 如何复制bash';s在作为参数传递给其他命令的命令上转义

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,如下所示:

$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
。它不同于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>
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阻止的那样。