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

すでに空白に対する引数を引用

を(あなたが苦労して1つの文字列として、独自のコマンドラインを構成する1とは反対に、私はそれをお勧めしません)それは二重引用符を渡して失敗します。ただ、やる:

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 "

関連する問題