Tôi đang làm việc trên một kịch bản trình bao bọc sẽ thực thi một vmware thực thi, cho phép tự động hóa các hoạt động khởi động/tắt máy/đăng ký/hủy đăng ký máy ảo. Tôi đang cố gắng sử dụng subprocess để xử lý gọi thực thi, nhưng không gian trong đường dẫn thực thi và trong các tham số của thực thi không được xử lý một cách chính xác bởi subprocess. Dưới đây là một đoạn mã:Cách sử dụng tiến trình con khi nhiều đối số chứa dấu cách?
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
Nếu tôi gọi hàm vm_list2, tôi nhận được kết quả như sau:
$ ./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
Nếu tôi gọi hàm vm_start, đòi hỏi một tham số path-to-vm, Tôi nhận được kết quả sau:
$ ./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.
Rõ ràng, sự hiện diện của tham số thứ hai với không gian được nhúng làm thay đổi cách mà quy trình con giải thích tham số đầu tiên. Bất kỳ đề xuất nào về cách giải quyết vấn đề này?
python2.5.2/cygwin/winxp
Tại sao các dấu gạch chéo của bạn trong c:/Program Files/VMware/VMware Server/vmware-cmd. bat đi sai đường? Không phải là c: \ Program Files \ ...? –
Vâng, Cygwin là cổng * nix, vì vậy nó có vẻ giống như tiêu chuẩn (hoặc những gì tôi hiểu là tiêu chuẩn) * nix slash ký hiệu Sự hiểu biết của tôi là tiến trình con nên dịch bộ phân tách thành bất kỳ hệ thống nào cần thiết. –
đã giải quyết ngay bây giờ chưa? – Gohan