2017-09-04 70 views
3

我正在编写一个Python3脚本,以在基本上取消注册所有VirtualBox计算机的Windows/OSx上运行。Python3从列表中创建数组(我认为)

为此,我打算列出所有当前注册的机器,然后遍历输出以取消注册每个机器。

命令

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

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

你可能想使用subprocess,如图所示如下:

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

传说,谢谢! – medoix