我正在编写一个在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
答案 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())
....