在Python命令输出到shell脚本中时使用grep

2024-10-03 23:24:13 发布

您现在位置:Python中文网/ 问答频道 /正文

在过去的两个小时里,我一直在努力学习这个简单的例子:

我有一句话:

python -c 'import yum, pprint; yb = yum.YumBase(); pprint.pprint(yb.conf.yumvar, width=1)'

它给出:

Loaded plugins: product-id
{'arch': 'ia32e',
 'basearch': 'x86_64',
 'releasever': '7Server',
 'uuid': 'd68993fd-059a-4753-a7ab-1c4a601d206f',
 'yum8': 'rhel',
 'yum9': '7.1'}

现在,我只想和“释放者”取得联系。你知道吗

直接在我的Linux上,没有问题:

$ python -c 'import yum, pprint; yb = yum.YumBase(); pprint.pprint(yb.conf.yumvar, width=1)' | grep releasever
 'releasever': '7Server',

我有我要找的答案。你知道吗

但要把它写进剧本里,我真是太无奈了。你知道吗

目前,我有:

#!/bin/ksh
check="$(python -c 'import yum, pprint; yb = yum.YumBase(); pprint.pprint(yb.conf.yumvar, width=1)')"


echo "${check}"
# The echo works as expected. But now, I would like to do a grep on that variable:

check2=${check}|grep releasever

echo "${check2}"

结果是空的。你知道吗

我试过很多不同的方法,比如方括号,圆括号,引号,双引号,一体式命令,但是我不能得到我想要的。 我不知道代码背后发生了什么,这很简单。但还是

有人能帮我吗?你知道吗


Tags: importechoconfcheckwidthgrep例子pprint
2条回答

你的问题是你没有把check放在任何类型的std输入中。这很好:

check2=$(echo "$check" | grep releasever)

或者你可以把check内容放进一个文件,然后像grep <string> < <file>那样做。你知道吗

似乎有三种选择。你知道吗

看起来yb.conf.yumvar是一本字典。在这种情况下,您可以在python脚本中打印yb.conf.yumvar['releasever']目录,这样就不需要grep了。你知道吗

其次,不要使用grep。相反,让python脚本将yb.conf.yumvar解析为json并打印它,然后从外部使用jq打印releasever的值

第三,这是最明智的方法,直接在Python中做你想做的事情。ksh脚本在较长的时间内将更难管理,所以只需在Python和us os.system中执行您想要执行的外部程序即可。你知道吗

相关问题 更多 >