Ich arbeite an einem Wrapper-Skript, das eine ausführbare vmware ausführen wird, die die Automatisierung der Start/Herunterfahren/Registrieren/Aufheben der Aktionen der virtuellen Maschine ermöglicht. Ich versuche Subprozess zu verwenden, um die ausführbare Datei aufzurufen, aber die Leerzeichen im ausführbaren Pfad und in den Parametern der ausführbaren Datei werden vom Subprozess nicht korrekt verarbeitet. Unten ist ein Codefragment:Wie Subprozess verwenden, wenn mehrere Argumente Leerzeichen enthalten?
vmrun_cmd = r"c:/Program Files/VMware/VMware Server/vmware-cmd.bat"
def vm_start(target_vm):
list_arg = "start"
list_arg2 = "hard"
if vm_list(target_vm):
p = Popen([vmrun_cmd, target_vm, list_arg, list_arg2], stdout=PIPE).communicate()[0]
print p
else:
vm_register(target_vm)
vm_start(target_vm)
def vm_list2(target_vm):
list_arg = "-l"
p = Popen([vmrun_cmd, list_arg], stdout=PIPE).communicate()[0]
for line in p.split('\n'):
print line
Wenn ich die vm_list2 Funktion aufrufen, erhalte ich die folgende Ausgabe:
$ ./vmware_control.py --list
C:\Virtual Machines\QAW2K3Server\Windows Server 2003 Standard Edition.vmx
C:\Virtual Machines\ubunturouter\Ubuntu.vmx
C:\Virtual Machines\vacc\vacc.vmx
C:\Virtual Machines\EdgeAS-4.4.x\Other Linux 2.4.x kernel.vmx
C:\Virtual Machines\UbuntuServer1\Ubuntu.vmx
C:\Virtual Machines\Other Linux 2.4.x kernel\Other Linux 2.4.x kernel.vmx
C:\Virtual Machines\QAClient\Windows XP Professional.vmx
Wenn ich die vm_start Funktion aufrufen, die einen Weg zu vm Parameter erfordert, ich erhalte die folgende Ausgabe:
$ ./vmware_control.py --start "C:\Virtual Machines\ubunturouter\Ubuntu.vmx"
'c:\Program' is not recognized as an internal or external command,
operable program or batch file.
Offenbar ist die Anwesenheit eines zweiten Parameters mit eingebetteten Leerzeichen wird, um die Art und Weise zu verändern, dass subprocess den ersten Parameter interpretiert. Irgendwelche Vorschläge, wie man das löst?
python2.5.2/Cygwin/winxp
Warum sind Ihre Schrägstriche in c:/Programme/VMware/VMware Server/vmware-cmd. Fledermaus in die falsche Richtung gehen? Ist es nicht c: \ Programme \ ...? –
Nun, Cygwin ist * Nix-Port, so scheint es, dass der Standard (oder was ich verstehe, um den Standard zu sein) * Nix-Schrägstrich-Notation Mein Verständnis ist, dass Subprozess das Trennzeichen zu was auch immer das zugrunde liegende System benötigt übersetzt. –
hat es für jetzt gelöst? – Gohan