2017-02-21 51 views
0

嘗試使用subprocess.Popen()以文件路徑作爲參數運行命令。這失敗了,似乎Popen()將當前目錄添加到傳遞給命令的參數列表中。Python Popen將當前目錄添加到參數?

[email protected]:~/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() 
[email protected]:~/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"

謝謝!

+2

請勿將引號中的路徑包圍。當使用'Popen'時,沒有必要這樣做,引號只會導致路徑無效。 –

+0

當你只傳遞單個字符串參數時,你需要在'Popen'中。 –

回答

0

你正在爲此工作太辛苦。這Popen語法:

subprocess.Popen(["vmrun", "start", vm_path]) 

已經援引論據反對空白(而不是在一個地方,你辛辛苦苦自己的命令行組成一個字符串,我不建議)

既然你還可以添加報價,它通過litterales litterally它失敗。只要做到:

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

帶空格的路徑需要處理。 該計劃是因爲空間的失敗:

「/ mas_data/VMS/XP VM 1/XP VM 1.vmx」

請修改目錄名和文件名,除去空間和檢查 「 /mas_data/vms/XP_VM_1/XP_VM_1.vmx「