2017-09-04 15 views
3

私はすべてのVirtualBoxマシンを基本的に登録解除する両方のwindows/osxで動作するPython3スクリプトを書いています。Python3リストから配列を作成する(私が思う)

これを行うには、現在登録されているすべてのマシンをリストし、出力をループしてそれぞれを登録解除することを計画します。

コマンドの出力

VBoxManage list vms 

はどのように1は、その後、登録を解除するコマンドを反復処理するために、配列に二重引用符内の文字列のそれぞれを変換するのでしょうか?

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

をしようとしているものです。しかしos.systemの戻り値がpydocを参照してください、コマンドのstdoutない

TypeError: expected string or bytes-like object 

答えて

1

を得続けます。その結果、reは使用できませんでした。

次の示すように、subprocessを使用する場合があります:あなたに感謝し、

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

伝説! – medoix

関連する問題