2017-06-13 37 views
3

命令來運行內MyCWD(可變捕獲工作目錄): vagrant ssh -c "cd /Path/To/Dir && ./my-shell-script.sh -d argD -f argF"我該如何格式化命令參數,它們本身就是一組Python命令的子進程模塊?

我想這樣做,但沒有奏效:

vagrantCmd = ['vagrant','ssh','-c', 
       'cd', '/Path/To/Dir', '&&', 
       './my-shell-script.sh', '-d', '-argD', '-f', 'argF'] 

output,error = subprocess.Popen(command, universal_newlines=True, 
      stdout=subprocess.PIPE, stderr=subprocess.PIPE, cwd=MyCWD).communicate() 

但是,如果我這樣做,它只是工作:

argCmd = ['cd', '/Path/To/Dir', '&&', 
      './my-shell-script.sh', '-d', '-argD', '-f', 'argF'] 
os.chdir(MyCWD) 
os.system('vagrant ssh -c "%s"' % ' '.join(argCmd)) 

後者似乎很多更容易但不再推薦os.system。我怎麼能得到這個與subprocess.Popen()

根據某些設置構建陣列(argCmd)。基本上我建立了這樣的數組,然後嘗試將它們傳遞給subprocess.Popen,但是這種奇怪的字符串構建總是讓我用這個模塊敲打我的頭,但是對於os.system來說是相當微不足道的。你如何有效地使用字符串和subprocess

回答

2

你與你的Python代碼是什麼:

vagrant ssh -c cd /Path/To/Dir && ./my-shell-script.sh -d argD -f argF 

你需要什麼:

vagrant ssh -c "cd /Path/To/Dir && ./my-shell-script.sh -d argD -f argF" 

如何解決呢?

vagrantCmd = ['vagrant','ssh','-c', 
      ' '.join(['cd', '/Path/To/Dir', '&&', 
      './my-shell-script.sh', '-d', '-argD', '-f', 'argF'])] 
+0

我也嘗試......但是毫無效果由於某種原因 - 它似乎在加入不包括雙引號子參加... – PhD

+0

我固定它,@PhD – enedil