3

I am writing a Python3 script to run on both windows/osx that will essentially unregister all VirtualBox machines.

To do this i plan on listing all currently registered machines and then looping through the output to unregister each.

The output of the command

VBoxManage list vms

is

"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}

How would one convert each of the strings inside the double quotes into an array to then iterate over with a command to unregister?

This is what i have been trying

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

But keep getting

TypeError: expected string or bytes-like object

1 Answer 1

1

The return value of os.system is not the stdout of the command, see pydoc. As a result, you could not use re on it.

You might want to use subprocess, as shown following:

with subprocess.Popen(["VBoxManage", "list", "vms"], stdout=PIPE) as proc:
    machines = re.findall(r'"([^"]*)"', (proc.stdout.read())
    ....
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.