Python Popen 将当前目录添加到参数?

Python Popen adding current directory to arguments?

尝试使用 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"

提前致谢!

你太辛苦了。此 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")

你会没事的。

具有 space 的路径需要处理。 该程序因 space:

而失败

"/mas_data/vms/XP 虚拟机 1/XP 虚拟机 1.vmx"

请修改目录名和文件名去掉space并检查 "/mas_data/vms/XP_VM_1/XP_VM_1.vmx"