Python3从列表中创建数组(我想)

时间:2017-09-04 04:40:55

标签: arrays python-3.x list

我正在编写一个在windows / osx上运行的Python3脚本,它基本上会取消注册所有VirtualBox机器。

为此,我计划列出所有当前注册的计算机,然后循环输出以取消注册每个计算机。

命令的输出

VBoxManage list vms

"virtual-machine1" {a391df10-c90b-4dcb-b149-c739ddde3b2f}
"virtual-machine2" {5ed8d7a8-df6e-4f4d-8ccc-9aacba90bd66}
"virtual-machine3" {820c4977-0fd2-4d37-8fbf-5760b171dc2a}
"virtual-machine4" {9bbd5b02-ccb7-4fb6-b167-d3ec6a729490}
"virtual-machine5" {816fef2c-05a4-4acb-931c-47877de46547}
"virtual-machine6" {5f2f81ee-6414-4a28-aac6-4921439bfaea}
"virtual-machine7" {03aa7fe4-5c78-4c3a-ac1e-475b704e8449}

如何将双引号内的每个字符串转换为数组,然后使用取消注册的命令进行迭代?

这就是我一直在尝试

    existing = os.system("VBoxManage list vms")
    machines = re.findall(r'"([^"]*)"', existing)
    for m in machines:
        print(m)

但继续

TypeError: expected string or bytes-like object

1 个答案:

答案 0 :(得分:1)

os.system的返回值不是命令的stdout,请参阅pydoc。因此,您无法在其上使用re

您可能希望使用subprocess,如下所示:

with subprocess.Popen(["VBoxManage", "list", "vms"], stdout=PIPE) as proc:
    machines = re.findall(r'"([^"]*)"', (proc.stdout.read())
    ....