如何在列表或数组中保存python脚本中的shell脚本打印输出?

2024-06-16 10:44:02 发布

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

我想在python脚本中运行shell命令。并将打印输出保存在列表或数组中。在

例如,打印出shell命令如下所示

root@cic-1:~# for i in $(neutron net-list | grep -i cscf2 | awk '{print $2}'); do neutron net-show $i | grep -i segmentation|awk '{print $4}' ; done
2006
2022
2023
2081
root@cic-1:~#

我希望这个打印输出保存在这样的列表中

[200620220232081]

我已经完成了下面的python代码

^{pr2}$

输出是2,但是我希望VLAN[0]是2006


Tags: in命令脚本列表fornetroot数组
2条回答

你可以用subprocess.check_输出更容易地捕获命令的输出。这在功能上等同于你所拥有的。在

vlans = subprocess.check_output(
    "for i in $(neutron net-list | grep -i cscf2 | awk '{print $2}'); "
    "do neutron net-show $i | grep -i segmentation|awk '{print $4}' ; done")

如果要将VLAN作为字符串列表,可以执行以下操作:

^{pr2}$

如果需要整数列表,请执行以下操作:

vlans = [int(v) for v in vlans.splitlines()]

如果您希望vlans[0]作为输出的第一行,那么需要将输出拆分为多行。{{do}添加到这个命令的末尾:

>>> vlans= subprocess.Popen ('printf "%s\n" 2006 2022 2023 2081', shell=True, stdout=subprocess.PIPE).communicate()[0].split('\n')
>>> vlans
['2006', '2022', '2023', '2081', '']
>>> vlans[0]
'2006'

当然,由于我没有neutronnet-list,所以我用另一个shell命令替换了它,它给出了与您显示的相同的输出。在

改善

Shell输出通常包括最后一个换行符。但是,当python的split函数看到最后一行新行时,它将创建最后一个空字符串。为了消除这种情况,我们可以在将输出传递给split之前将其应用于输出:

^{pr2}$

根据您的目标,您可能希望使用rstrip('\n')来代替饥饿的人strip()。在

相关问题 更多 >