2017-02-21 6 views
0

Пытается использовать подпроцесс.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]) 

уже приводит аргументы против пробелов (в отличие от того, где вы кропотливо сочинить свою собственную командную строку в виде одной строки, я не рекомендую)

Поскольку вы также добавить цитаты, он передает цитаты литерно, и он терпит неудачу. Вобще:

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 "

Смежные вопросы