我如何格式化命令参数,这些参数本身就是一组使用Python的命令';s子流程模块?

我如何格式化命令参数,这些参数本身就是一组使用Python的命令';s子流程模块?,python,python-2.7,subprocess,popen,Python,Python 2.7,Subprocess,Popen,在MyCWD内运行的命令(变量捕获工作目录): vagrant ssh-c“cd/Path/To/Dir&./my-shell-script.sh-d argD-f argF” 我尝试过这样做,但没有成功: vagrantCmd = ['vagrant','ssh','-c', 'cd', '/Path/To/Dir', '&&', './my-shell-script.sh', '-d', '-argD', '-f',

MyCWD
内运行的命令(变量捕获工作目录):
vagrant ssh-c“cd/Path/To/Dir&./my-shell-script.sh-d argD-f argF”

我尝试过这样做,但没有成功:

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
来说,这是非常琐碎的。如何有效地处理字符串和
子流程?

我会尝试以下方法:

ok = ['vagrant', 'ssh', '-c']
v = '"{}"'.format 
sub = 'cd /Path/To/Dir && ./my-shell-script.sh -d -argD -f argF'
ok.append(v(pipes.quote(sub)))
以及:

见:


。。。基本上是逃跑的包装。也许是个装修工?或者像这样的花哨的东西。

如何处理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'])]

我确实试过了……但由于某种原因,一切都不起作用——连接似乎不包含子进程的双引号……我已经修复了它,@PhD
vagrantCmd = ['vagrant','ssh','-c', 
          ' '.join(['cd', '/Path/To/Dir', '&&', 
          './my-shell-script.sh', '-d', '-argD', '-f', 'argF'])]