仮想マシンの起動/シャットダウン/登録/登録解除アクションの自動化を可能にする、vmware 実行可能ファイルを実行するラッパー スクリプトに取り組んでいます。サブプロセスを使用して実行可能ファイルの呼び出しを処理しようとしていますが、実行可能ファイルのパスと実行可能ファイルのパラメーターのスペースがサブプロセスによって正しく処理されていません。以下はコードの一部です。
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
vm_list2 関数を呼び出すと、次の出力が得られます。
$ ./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
path-to-vm パラメーターを必要とする vm_start 関数を呼び出すと、次の出力が得られます。
$ ./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.
どうやら、スペースが埋め込まれた 2 番目のパラメーターの存在は、サブプロセスが最初のパラメーターを解釈する方法を変更しています。これを解決する方法について何か提案はありますか?
python2.5.2/cygwin/winxp