首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中操作函数输出

在python中操作函数输出
EN

Stack Overflow用户
提问于 2015-07-30 15:41:19
回答 1查看 466关注 0票数 1

在我正在构建的脚本中,我需要创建一个能够操作以下输出的函数:

代码语言:javascript
复制
+--------------------------------------+-------------+--------+------------+-------------+-------------------+
| ID                                   | Name        | Status | Task State | Power State | Networks          |
+--------------------------------------+-------------+--------+------------+-------------+-------------------+
| bffd525e-2ad1-2345-afe9-61598fe397c5 | server-name | ACTIVE | -          | Running     | 123.123.123.123   |
| e99eab05-7d08-1234-aa4b-3694f41623f7 | server-name | ACTIVE | -          | Running     | 123.123.123.123   |
| fbb98a6d-3cdd-de53-a75b-d979f97fcbf8 | server-name | ACTIVE | -          | Running     | 123.123.123.123   |
| 27154e64-a708-ea22-a6e6-ded3251af9ec | server-name | ACTIVE | -          | Running     | 123.123.123.123   |
| 9301d7d4-7e76-9fee-8e41-787de357a6ff | server-name | ACTIVE | -          | Running     | 123.123.123.123   |
| e0f9eca9-5033-f5a2-9c93-4c26f9e117c8 | server-name | ACTIVE | -          | Running     | 123.123.123.123   |
| 0e433279-d10e-c324-8310-668df4c237b9 | server-name | ACTIVE | -          | Running     | 123.123.123.123   |
| 3eb38d5c-db5c-7814-9b28-54821ae4d590 | server-name | ACTIVE | -          | Running     | 123.123.123.123   |
| 2dceec47-bd36-4f9e-8a29-47fe4c7558f3 | server-name | ACTIVE | -          | Running     | 123.123.123.123   |
+--------------------------------------+-------------+--------+------------+-------------+-------------------+

在上面的输出中,我只需要接受“ID”字段下存在的字段,并对每个字段执行一个特定的命令(需要记住,在某些情况下,列表中可能只有两个ID,而在其他情况下,我可能得到超过14个ID)。

在bash中,我所做的是将输出定向到临时文件,然后使用“for”循环并执行所需的操作:

代码语言:javascript
复制
for i in `cat filename | awk '{ print $2 }'`; do
    my commands here..
done

现在,我想我也许可以或多或少地使用相同的命令(通过导入os模块并以普通shell的形式运行命令)在Python中做同样的事情,但是我真的很想学习如何用Python的方式来完成它,这可能更高效,并且在将来的情况下也可以帮助我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-30 16:04:47

看起来,您正在尝试解析nova list的输出。虽然这可能是一个可以接受的短期解决方案,但如果您开始使用诺瓦利特,一个更好的选择可能是使用现有的nova Python库(如果您能够运行nova cli,它已经安装在您的系统上)。

代码语言:javascript
复制
>>> import novaclient.client
>>> client = novaclient.client.Client(2, 'username', 'password',
... 'myproject', auth_url='http://controller:5000/v2.0')
>>> [server.id for server in client.servers.list()]
[u'40b74857-830f-4c50-b34e-d7a4a0b50e64']

使用Python意味着不再需要解析主要设计为人类可读的命令的输出,而不是作为脚本的输入。

您可以使用nova命令行客户机使用novaclient API完成的所有工作(实际上,这正是nova cli与OpenStack环境通信所使用的)。

如果您刚刚开始使用Python,这可能不是最好的起点,但是如果您对Python更加熟悉了,就应该记住这一点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31728274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档