在我构建的脚本中,我需要创建一个能够操作以下输出的函数:
+--------------------------------------+-------------+--------+------------+-------------+-------------------+
| 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'下的字段。字段并在每个字段上执行某个命令(需要记住,在某些情况下,列表中只能有2个ID,而在其他情况下,我可能会获得超过14个ID)。
在bash中,我所做的是将输出定向到临时文件,然后使用' for'循环并执行所需的操作:
for i in `cat filename | awk '{ print $2 }'`; do
my commands here..
done
现在,我想我可能会在Python中使用相同的命令或多或少地执行相同的操作(通过导入os模块并将命令作为普通shell运行),但我真的想学习如何使用Python方式,这可能更有效,并可以帮助我在未来的情况下..
答案 0 :(得分:2)
您似乎正在尝试解析nova list
的输出。虽然这可能是一个可接受的短期解决方案,但如果您开始使用Python,更好的选择可能是使用现有的novaclient Python库(如果您能够运行它) nova
cli已安装在您的系统上。
>>> 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 API意味着您不再需要解析主要设计为人类可读的命令输出,而不是用作脚本的输入。
使用nova
API可以使用novaclient
命令行客户端执行的所有操作(事实上,这正是nova
cli用于与OpenStack环境通信的内容)。
如果您刚刚开始使用Python,这可能不是最好的开始,但如果您对该语言越来越熟悉,请记住这一点。