2017-02-21 1 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]) 

이미 공백에 대한 인수를 인용

을 (당신이 근면 하나의 문자열로 자신의 명령 행을 구성하는 일에 반대는, 그 권장하지 않습니다) 따옴표를 따옴표로 전달하면 실패합니다.

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/VM을/XP VM 1/XP VM의 1.vmx"

공간을 제거하고 확인하는 디렉토리 이름과 파일 이름을 수정하십시오 " /mas_data/vms/XP_VM_1/XP_VM_1.vmx "

관련 문제