尝试使用subprocess.Popen()以文件路径作为参数运行命令。这失败了,似乎Popen()将当前目录添加到传递给命令的参数列表中。
phil@mas-xubuntu:~/Downloads/pycharm-community-2016.3.2/bin$ python3
Python 3.5.2 (default, Nov 17 2016, 17:05:23)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> vm_root = "/mas_data/vms/"
>>> vm_path = "\"" + vm_root + "XP VM 1/XP VM 1.vmx\""
>>> vm_path
'"/mas_data/vms/XP VM 1/XP VM 1.vmx"'
>>> subprocess.Popen(["vmrun", "start", vm_path])
<subprocess.Popen object at 0x7f6b9225c898>
>>> Error: Cannot open VM: /home/phil/Downloads/pycharm-community-2016.3.2/bin/"/mas_data/vms/XP VM 1/XP VM 1.vmx", unknown file suffix
exit()
phil@mas-xubuntu:~/Downloads/pycharm-community-2016.3.2/bin$ vmrun start "/mas_data/vms/XP VM 1/XP VM 1.vmx"
<VM launches>
不确定我缺少让Popen工作并执行命令vmrun start "/mas_data/vms/XP VM 1/XP VM 1.vmx"
提前致谢!
答案 0 :(得分:0)
Popen
语法:
subprocess.Popen(["vmrun", "start", vm_path])
已经引用了针对空白的参数(而不是你将自己的命令行作为单个字符串组成的那个,我不推荐)
由于您还添加了引号,因此它会通过引号传递并失败。只是做:
vm_path = vm_root + "XP VM 1/XP VM 1.vmx"
或者更好:
vm_path = os.path.join(vm_root,"XP VM 1/XP VM 1.vmx")
你会没事的。
答案 1 :(得分:-1)
需要处理带空格的路径。 由于空间原因,该计划失败了:
“/ mas_data / vms / XP VM 1 / XP VM 1.vmx”
请修改目录名称和文件名以删除空格并检查 “/mas_data/vms/XP_VM_1/XP_VM_1.vmx”